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);
......
}

 

目录
相关文章
|
编解码 算法 Ubuntu
Gstreamer 硬解码Rtsp流及代码实现
Gstreamer 硬解码Rtsp流及代码实现
|
Linux Android开发 编解码
VLC播放RTSP视频延迟问题
之前写过一篇关于在Linux平台上编译Android平台上VLC播放器源代码的文章,vlc这款播放器非常优秀而且是开源的,它的核心是开源视频编解码库ffmpeg。而且这款播放器还支持RTSP协议,这个主要是用开源的live555来实现的,live555这个库以后还需要认真研习。
5928 0
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
2893 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
存储 数据挖掘 Python
Python技术分享:实现选择文件或目录路径的方法
Python技术分享:实现选择文件或目录路径的方法
1153 2
|
Shell Android开发
Android USB系统初始化init.usb.rc
Android USB系统初始化init.usb.rc
1288 0
|
编解码 网络协议 应用服务中间件
公网可用的RTMP、RTSP测试地址
好多博客提到的公网可测试的RTSP和RTMP URL大多都不用了,以下是大牛直播SDK(Github)于2021年3月亲测可用的几个URL,有其他可用的URL,也欢迎大家在评论区回复。
24378 0
|
存储 编解码 API
【视频花屏问题】解码天书:深入理解视频流花屏现象及其解决方案
【视频花屏问题】解码天书:深入理解视频流花屏现象及其解决方案
2854 8
|
算法 编译器 C语言
【CMake install 命令】精通CMake安装:灵活、高效的构建和部署
【CMake install 命令】精通CMake安装:灵活、高效的构建和部署
3298 0
MFC自定义button实现颜色控制
MFC自定义button实现颜色控制
280 0
|
Java Android开发
Andoroid 11 开机广播处理超时导致第三方应用启动延迟
Andoroid 11 开机广播处理超时导致第三方应用启动延迟
826 0
Andoroid 11 开机广播处理超时导致第三方应用启动延迟