我正在开发一个视频分析应用程序,在该应用程序中,我必须解码RTSP流以提供IplImage帧,然后将这些帧输入到我的分析管道中。
现在,OpenCV VideoCapture结构允许我从RTSP流中提取帧(我认为它使用ffmpeg来提取帧),但是性能不是很好。它需要实时工作。

我还继续编写了自己的ffmpeg解码器。但是就像OpenCv一样,RTSP流的性能也不佳。许多帧被丢弃。但是,从本地文件解码可以正常工作。

我需要帮助的是这个。首先,我可以在这里使用硬件加速解码来提高性能吗?我的应用程序应该是跨平台的,所以我可能需要使用Directx VA(windows)和VAAPI(linux)。如果是,那么在任何地方我都可以学习如何在代码中实现硬件加速,尤其是对ffmpeg解码h264?

最佳答案

据我所知,使用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

关于opencv - 使用ffmpeg,OpenCV进行硬件加速的h264解码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12952624/

10-12 00:23
查看更多