您当前的位置: 首页 > 

gstreamer正确的结束办法

柳鲲鹏 发布时间:2019-03-08 12:11:27 ,浏览量:0

  原来的方案:

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

 

 

 

关注
打赏
1688896170
查看更多评论

柳鲲鹏

暂无认证

  • 0浏览

    0关注

    4641博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0457s