opencv - 使用 ffmpeg、OpenCV 的硬件加速 h264 解码

标签 opencv ffmpeg h.264 hardware-acceleration decoder

我正在开发一个视频分析应用程序,我必须解码一个 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/

相关文章:

python - 如何更改与黑色接触的像素颜色集

android - 使用 ffmpeg 进行视频转换后在 iPhone 上播放视频

azure - 使用 Azure 媒体服务对 Web 和移动视频进行编码

c++ - OpenCV CascadeClassifier 初始化

image - OpenCV:在图像上绘图

c++ - findContours 给出内存堆错误

FFMPEG 在使用 rtsp-simple-server 降低 FPS 和通过 RTSP 流式传输时保持质量

android - 无法在 Android 上将 mp4 文件与 FFmpeg 合并

c# - 在 C# 中获取视频时长、帧速率和其他属性

ffmpeg - 伪流式 mp4 文件不适用于 Flash 播放器