我已经通过使用gst-launch实用程序对GStreamer进行了一些实验。但是,最终的目标是使用GStreamer库在我自己的应用程序上实现相同的功能。
问题在于,要将我在命令行上测试的内容“移植”到C/C++代码中是很困难的(至少对于不习惯GStreamer应用程序接口的人来说是这样)。
我可能需要移植的命令示例如下:
gst-launch filesrc location="CLIP8.mp4" ! decodebin2 ! jpegenc ! multifilesink location="test%d.jpg"什么是最“直接”的方式/方法来接受这样的命令并在我自己的应用程序上用C编写它。
此外,作为一个次要问题,我如何才能将多文件链接替换为在内存上执行此工作的可能性(我正在使用OpenCV对应该从视频中提取的给定图像执行一些计算)。是否可以直接解码到内存中并立即使用它,而无需首先保存到文件系统?它可以(也应该)是连续的,我的意思是,只有在我处理完当前帧之后,它才会移动到下一帧,这样我就不必在内存中保留数千帧。
你说呢?
发布于 2011-07-31 00:26:27
我找到了解决方案。GStreamer中内置了一个函数,可以解析gst-launch参数并返回管道。该函数名为gst_parse_launch,文档记录在以下位置:http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html
我还没有测试过它,但是将在命令行上测试的代码转换成C/C++代码可能是最快的解决方案。
发布于 2011-07-27 06:07:47
您可以随时打开the source of gst-launch,获取解析出命令行并将其转换为GStreamer管道的部分内容。
这样,您只需将“命令行”作为字符串传递,该函数将为您返回一个完整的管道。
发布于 2011-12-23 03:41:15
顺便说一句,有一个有趣的GStreamer元素,它提供了一种将处理管道集成到(C/C++)应用程序中的好方法: appsink
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-appsink.html
使用这个,你基本上可以在一个大的C数组中从管道中检索帧,并对它们做任何你想做的事情。您设置了一个回调函数,该函数将在每次有新帧从管道线程中可用时激活...
https://stackoverflow.com/questions/6836899
复制相似问题