gpt4 book ai didi

c++ - FFMPEG 和 DXVA2

转载 作者:行者123 更新时间:2023-11-30 05:33:34 26 4
gpt4 key购买 nike

我用 FFMPEG 制作了一个 IP 摄像机播放器(全高清 H264)我在 Windows 下使用 Qt 进行编码。我需要尽可能低的延迟,并且我可以获得最好的结果:

  • 我用live555拿到了数据包,
  • 使用ffmpeg解码
  • 用 SDL 显示它。

但是如果比特率太高或无法处理 1080p,我会遇到“慢速”CPU 的大量延迟。

我真的很想尝试使用 DXVA2 进行硬件加速,看看我是否可以获得更好的性能,尤其是在最慢的 CPU 上。

但我真的不知道如何进行。我必须使用 --enable-dxva2 和 --enable-hwaccel=h264_dxva2 构建 FFMPEG 吗?或 Zeranoe 构建我从未使用过 Direct X,我是否需要 Direct X 知识,或 ffmpeg 与 --enable-dxva2 和 --enable-hwaccel=h264_dxva2 照顾一切?

谢谢

编辑:

您好,我使用这篇文章来帮助我使用 FFMPEG 进行硬件加速 Failed to execute: 0x80070057, when decoding video via ffmpeg with dxva2

我用

解码数据包
avcodec_decode_video2(pCodecCtx, pFrame, &gotPic, &packet);

我正在用

获取我的解码帧
dxva2_retrieve_data_call(pCodecCtx, pFrame, &gotPic, &packet);

我试着转换它

sws_scale(img_convert_affic, pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);

并将缓冲区复制到Qimage

LastFrame=QImage(w,h,QImage::Format_RGB888);
for(int y=0;y<h;y++)
memcpy(LastFrame.scanLine(y),pFrameRGB->data[0]+y*pFrameRGB->linesize[0],w*3);

我得到了我的照片,但有很多伪影,几秒钟后我在 dxva2_retrieve_data_call(pCodecCtx, pFrame, &gotPic, &packet);

中遇到了段错误

编辑:问题已解决我在检索照片之前没有检查是否有照片。但是我的桌面计算机(英特尔酷睿 i5 650、4GB 内存、ATI HD5800)的性能非常差,它消耗了 5% 以上的 CPU、3 倍以上的内存和大量损坏的帧。它在较新的计算机上更好,但软解码器更好。启用 hwaccel 时,dxva2_retrieve_data_call 和 sws_swale 会消耗大量时间......

有没有办法在Qt中显示NV12图片(没有sws_scale转换),有没有办法优化dxva_retrieve_data_call?

最佳答案

如果你想要真正的GPU加速(没有copy back),你需要通过IDirect3DDeviceManager9(Directx9)/IMFDXGIDeviceManager(Directx11)提供DirectX Surface。 QT 和 FFMPEG 不为您提供。您还需要提供 DirectX 显示机制。

关于c++ - FFMPEG 和 DXVA2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34719449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com