使用ffmpeg、OpenCV进行硬件加速的h264解码

6
我正在开发一个视频分析应用,需要将RTSP流解码为IplImage帧,然后将其输入到我的分析管道中。OpenCV的VideoCapture结构允许我从RTSP流中提取帧(我认为它使用ffmpeg完成),但性能不佳。它需要实时工作。
我还自己写了ffmpeg解码器。但是,就像OpenCv一样,在处理RTSP流时性能也不好,会有很多帧被丢弃。然而,从本地文件解码正常工作。我仍在继续完善代码。
我需要帮助的是,首先,我能否使用硬件加速来提高性能?我的应用程序应该跨平台,因此我可能需要使用Directx VA(Windows)和VAAPI(Linux)。如果可以,那么是否有任何地方可以学习如何在代码中实现硬件加速,特别是对于h264的ffmpeg解码?

FFmpeg已经支持VAAPI(以及VDPAU),我想。 - sashoalm
2
我正在尝试回答自己的一个老问题,但是......虽然ffmpeg通过vaapi和qsv支持硬件加速,但在使用命令行时让它实际执行需要配置。在OpenCV API中似乎不存在该配置。 - TheAtomicOption
1个回答

0

据我所知,使用ffmpeg后端的VideoCapture不支持硬件加速。

我认为你可以选择使用gstreamer作为后端的VideoCapture,你可以自定义管道并通过vaapi启用硬件加速。

我正在使用这个管道:

rtspsrc location=%s latency=0 ! queue ! rtph264depay ! h264parse ! vaapidecodebin ! videorate ! videoscale ! videoconvert ! video/x-raw,width=640,height=480,framerate=5/1,format=BGR ! appsink

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