将Gstreamer SDK教程(gstreamer 0.1)移植到gstreamer 1.0

时间:2013-10-13 14:33:01

标签: gstreamer

是否有人尝试过使用Gstreamer SDK Tutorials http://docs.gstreamer.com/display/GstSDK/Tutorials 到gstreamer 1.0?

我尝试将基本教程8.c从GstSDK移植到gstreamer 1.0。最终结果不起作用,并在运行时退出并出现错误。

这是我到目前为止所做的。我的主要帮助来源是以下页面: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-porting-1.0.html#section-porting-objects-1.0

  1. 将audio / x-raw-int替换为audio / x-raw

  2. 用data.app_sink替换了data.app_sink,“new-buffer”,“new-sample”

  3. 代替

    tee_src_pad_template = gst_element_class_get_pad_template (GST_ELEMENT_GET_CLASS (data.tee), "src%d");
    

    tee_src_pad_template = gst_element_class_get_pad_template( GST_ELEMENT_GET_CLASS( data.tee ), "src_%u" ); 
    
  4. 代替

    raw = (gint16 *)GST_BUFFER_DATA (buffer);
    
  5. GstMapInfo stGstMapInfo1;
    gst_buffer_map( buffer, &stGstMapInfo1, (GstMapFlags)( GST_MAP_READ | GST_MAP_WRITE ) );
    raw = (gint16 *)stGstMapInfo1.data;
    

    。 。

    /* Free the buffer now that we are done with it */
    gst_buffer_unmap( buffer, &stGstMapInfo1 );
    
    • 5-用“videoconvert”替换“ffmpegcolorspace”

    完成上述更改后,我可以构建并运行该程序,但过了一会儿就会出现以下错误: 从元素audio_source收到错误:内部数据流错误。 调试信息:gstbasesrc.c(2865):gst_base_src_loop():/ GstPipeline:test-pipeline / GstAppSrc:audio_source: 流媒体任务暂停,原因未协商(-4)

    我想我必须更多地学习本教程的new_buffer和push_data函数。

    提前感谢您的帮助。

2 个答案:

答案 0 :(得分:9)

SDK教程已在此处移植(由GStreamer开发人员之一):

http://cgit.freedesktop.org/~slomo/gst-sdk-tutorials/

答案 1 :(得分:1)

如果不查看最终代码,很难猜到。但错误来自appsrc并且是“未经协商的”。从0.10到1.0的一个主要变化是缓冲区不再有上限。

在0.10中,当你向appsrc发送一个GstBuffer时,它会携带一个GstCaps,并在第一个缓冲区被推送时进行设置和协商。在1.0中,你应该在将缓冲区推送到appsrc之前明确设置一个上限。

此外,audio / x-raw-int并不完全等同于audio / x-raw,因为audio / x-raw也可以表示浮动表示的音频。您可能需要查看http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-gstaudio.html#GstAudioFormat以查看是否要设置更严格的音频上限。

另外,GstSample(http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html)是一个包含GstBuffer和GstCaps的小对象,可能有助于仔细检查您是否正确使用它。