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

3
有人尝试过将Gstreamer SDK Tutorials从gstreamer 0.10迁移到gstreamer 1.0吗?
我尝试将GstSDK中的basic-tutorial-8.c移植到gstreamer 1.0,但最终结果无法运行,并且在运行时会出现错误。
以下是我目前所做的。我的主要帮助来源是以下页面:http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-porting-1.0.html#section-porting-objects-1.0
  1. Replaced audio/x-raw-int with audio/x-raw

  2. Replaced data.app_sink, "new-buffer" with data.app_sink, "new-sample"

  3. Replaced

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

    with

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

    raw = (gint16 *)GST_BUFFER_DATA (buffer);
    

使用

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个回答

9

我在OSX上运行这些程序时遇到了问题 - https://dev59.com/kH_aa4cB1Zd3GeqP8-Ho#23851995 - 1.0 SDK是否有gtk? - ThatGuy
移植教程的作者有一个博客,其中包含许多评论/问题/答案。 - cybersam

1
很难在不看您的最终代码的情况下猜测。但是错误来自appsrc,是“未经协商”的。从0.10到1.0的一个主要变化是,缓冲区不再有caps。
在0.10中,当您将GstBuffer发送到appsrc时,它会携带GstCaps,并且在推送第一个缓冲区时设置和协商。在1.0中,您应该在向appsrc推送缓冲区之前明确设置caps。
此外,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以查看是否要设置更严格的音频caps。
另外一件事,GstSample(http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstSample.html) 是一个包含 GstBuffer 和 GstCaps 的小对象,检查是否正确使用可能会有帮助。

谢谢,我会看看这些部分,看能否让它工作。原始代码可在以下链接获取: http://docs.gstreamer.com/display/GstSDK/Basic+tutorial+8%3A+Short-cutting+the+pipeline 我只是修改了我问题描述中提到的五个部分。 - Yashil
目前我发现以下帮助链接非常有用,可以逐个移植其他功能: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-dataaccess.html http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-appsink.html#gst-app-sink-pull-sample - Yashil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接