Gstreamer - 将命令行gst-launch转换为C代码

时间:2011-07-26 21:34:59

标签: c++ c opencv extract gstreamer

我一直在使用gst-launch实用程序对GStreamer进行一些实验。但是,最终目标是使用GStreamer库在我自己的应用程序上实现相同的功能。

问题是,最终很难(至少对于那些不习惯使用GStreamer API的人来说)将我在命令行上测试的内容“移植”到C / C ++代码。

我可能需要移植的命令示例是:

gst-launch filesrc location="CLIP8.mp4" ! decodebin2 ! jpegenc ! multifilesink location="test%d.jpg"

采用这种命令并在我自己的应用程序中用C语言编写它的最“直截了当”的方式/方法是什么。

另外,作为一个附带问题,我怎么能用在内存上做这项工作的可能性替换multifilesink(我正在使用OpenCV对应该从视频中提取的给定图像执行一些计算)。是否可以直接解码到内存并立即使用它而无需先保存到文件系统?它可以(也应该)是顺序的,我的意思是在我完成处理当前帧之后只会继续下一帧,这样我就不必在内存中保留数千帧。

你说什么?

3 个答案:

答案 0 :(得分:13)

我找到了解决方案。 GStreamer内置了一个函数,可以解析gst-launch参数并返回一个管道。该函数名为gst_parse_launch,在此处记录:http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html

我还没有测试过它,但它可能是最快的解决方案,可以将在命令行上测试的内容转换为C / C ++代码。

答案 1 :(得分:3)

您可以随时弹出the source of gst-launch并抓取解析命令行的位并将其转换为GStreamer管道。

这样你只需将“命令行”作为字符串传递,该函数将为你返回一个完整的管道。

答案 2 :(得分:1)

顺便说一下,有一个有趣的GStreamer元素,它提供了一种将处理管道集成到(C / C ++)应用程序中的好方法:appsink

http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-appsink.html

使用这个,您基本上可以从大型C数组中的管道中检索帧,并随心所欲地执行任何操作。您设置了一个回调函数,每次从管道线程中获得新帧时都会激活该函数...