问题
我正在研究的一个项目要求我解析帧,并在10Hz左右从树莓摄像机做一些非常简单的图像处理。
我尝试使用raspistill和raspiyuv(原始静止)应用程序来生成图像,但是它们都没有达到我想要的10Hz帧率(即使在128x64的低分辨率下,这就是我所需要的,在游戏中时光倒流模式下,每个图像的时间为1/2秒,延时设置为100毫秒。
raspivid应用程序允许我以高于必要的10帧/秒的速度输出视频,但是我不确定从.h264流中抓取帧进行图像处理的最佳方法。
我查看的内容
我发现Capturing jpegs from an h264 stream with gstreamer on a Raspberry Pi有人设法使用gstreamer从.h264相机流中获得1Hz的jpegs,这表明可以使用gstreamer简单地解析原始帧。
我尝试复制已完成的操作,但是当我尝试调用他未经修改的管道时,为了确保它正常工作,然后继续尝试修改它,它会给我一个从videorate0到jpegenc0的链接错误。
问题
我正在尝试使用gstreamer和可用的插件(或者我应该查看其他工具,例如ffmpeg)?如果是这样,有人可以提供协助让这个工作吗?最后,是否可以进一步使用此工具将这些原始帧直接传送到c程序进行解析? (可能使用!filesink location = / dev / stdout?)
答案 0 :(得分:0)
@MarkTolley我相信我使用的是gstreamer 1.0,虽然我应该注意到我使用gstreamer的经验不多,所以我在这个看似运行正常的pastebin中使用了构建脚本,然后安装所需的插件等。这可能会过时吗?
它已经过时了,但它仍然是gstreamer-1.0。由于1.1.x中的错误,该脚本看起来正在使用1.0.x分支。不幸的是,我不知道该错误是否已在1.2.x中修复。
在深入了解作者链接的邮件列表主题之后,我找到了他最终得到它的帖子:http://gstreamer-devel.966125.n4.nabble.com/Capturing-jpegs-from-an-h264-stream-tp4660254p4660459.html
raspivid -n -t 1000000 -vf -b 2000000 -fps 25 -o - | gst-launch-1.0 fdsrc ! video/x-h264,framerate=25/1,stream-format=byte-stream ! decodebin ! videorate ! video/x-raw,framerate=10/1 ! videoconvert ! jpegenc ! multifilesink location=img_%04d.jpg
尝试他在该帖子中使用的管道。如果您仍然遇到问题,我建议您发送到邮件列表或访问IRC频道,因为这些地方比SO更适合进行故障排除。
我会尝试回答原帖中的其他问题:
我正在尝试使用gstreamer和可用的插件
绝对! Gstreamer还支持rpi上的硬件编码/解码h264,我不知道其他工具是否有。
最后,是否可以进一步使用此工具将这些原始帧直接传送到c程序中进行解析
我发现你已经在使用fdsrc了,有一个相应的fdsink可以写入stdout。
但是如果您还要编写C程序,那么最好实现appsink并将gstreamer feed缓冲区直接添加到您的代码中。