gstreamer正确的结束办法

简介: gstreamer正确的结束办法

原来的方案:


gboolean callback_bus_call (GstBus * bus, GstMessage * msg, gpointer data)
{
    ......
    gst_element_set_state(pipeline, GST_STATE_NULL);
    g_main_loop_quit(loop);
    return true;
}
int main_thread()
{
    ......
    GstBus* bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
    guint bus_watch_id = gst_bus_add_watch(bus, callback_bus_call, pTask);
    gst_object_unref(bus);
    ......
    g_main_loop_run (loop);
}


 试图在callbak_bus_call()中得到出错和结束消息,然后再退出.结果发现要么无法退出,要么直接崩溃.



 以下是正确办法:


int main_thread()
{
......
    //阻塞,直到收到指定的消息
    GstBus* bus = gst_element_get_bus(pipeline);
    GstMessage* msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, (GstMessageType)(GST_MESSAGE_ERROR | GST_MESSAGE_EOS));
    if (msg != NULL)
    {
        gst_message_unref(msg);
    }
    gst_object_unref (bus);
    gst_element_set_state(pipeline, GST_STATE_NULL);
    gst_object_unref(pipeline);
......
}

 

目录
相关文章
|
8月前
USRP相关报错解决办法
USRP相关报错解决办法
125 1
|
8月前
|
Linux
linux(二十七)打包压缩命令bzip2~
linux(二十七)打包压缩命令bzip2~
69 0
|
3月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
119 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
6月前
|
Linux
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
《FFmpeg开发实战》书中介绍了直播的RTSP和RTMP协议,以及新协议SRT和RIST。SRT是安全可靠传输协议,RIST是可靠的互联网流传输协议,两者于2017年发布。腾讯视频云采用SRT改善推流卡顿。以下是Linux环境下为FFmpeg集成libsrt和librist的步骤:下载安装源码,配置、编译和安装。要启用这些库,需重新配置FFmpeg,添加相关选项,然后编译和安装。成功后,通过`ffmpeg -version`检查版本信息以确认启用SRT和RIST支持。详细过程可参考书中相应章节。
121 1
FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist
|
7月前
|
编解码 Linux
FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid
XviD是开源的MPEG-4视频编解码器,曾与DivX一起用于早期MP4视频编码,但现在已被H.264取代。要集成XviD到Linux上的FFmpeg,首先下载源码,解压后配置并编译安装libxvid。接着,在FFmpeg源码目录中,重新配置FFmpeg以启用libxvid,然后编译并安装。成功后,通过`ffmpeg -version`检查是否启用libxvid。详细步骤包括下载、解压libxvid,使用`configure`和`make`命令安装,以及更新FFmpeg配置并安装。
101 2
FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid
|
7月前
|
Web App开发 安全 Linux
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
《FFmpeg开发实战》书中介绍轻量级流媒体服务器MediaMTX,但其功能有限,不适合生产环境。推荐使用国产开源的ZLMediaKit,它支持多种流媒体协议和音视频编码标准。以下是华为欧拉系统下编译安装ZLMediaKit和FFmpeg的步骤,包括更新依赖、下载源码、配置、编译、安装以及启动MediaServer服务。此外,还提供了通过FFmpeg进行RTSP和RTMP推流,并使用VLC播放器拉流的示例。
338 3
FFmpeg开发笔记(二十六)Linux环境安装ZLMediaKit实现视频推流
|
7月前
|
编解码 Linux
FFmpeg开发笔记(二十五)Linux环境给FFmpeg集成libwebp
《FFmpeg开发实战》书中指导如何在Linux环境下为FFmpeg集成libwebp以支持WebP图片编解码。首先,从GitHub下载libwebp源码,解压后通过`libtoolize`,`autogen.sh`,`configure`,`make -j4`和`make install`步骤安装。接着,在FFmpeg源码目录中重新配置并添加`--enable-libwebp`选项,然后进行`make clean`,`make -j4`和`make install`以编译安装FFmpeg。最后,验证FFmpeg版本信息确认libwebp已启用。
125 1
FFmpeg开发笔记(二十五)Linux环境给FFmpeg集成libwebp
|
8月前
|
开发工具 git
vs2017下gstreamer编译
vs2017下gstreamer编译
101 0
cups 2.4.1编译办法
cups 2.4.1编译办法
177 0
|
Linux
LINUX编译时缺少头文件,查找依赖库的终极解决办法
LINUX编译时缺少头文件,查找依赖库的终极解决办法
432 0