我用FFMPEG为IP摄像机(全高清H264)做了一个播放器 我使用Qt在Windows下编码。我需要尽可能低的延迟,我能得到的最好结果是:
但是"慢" CPU如果比特率太高或者它无法处理1080p,我会有很多延迟。
我真的想尝试使用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);
编辑: 问题解决了我在检索之前没有检查是否有照片。 但是我的台式机cmputer(英特尔酷睿i5 650,4GB内存,ATI HD5800)的性能非常差,它消耗了5%的CPU,3倍的内存和大量的损坏帧。 在较新的计算机上它更好,但软解码器更好。 启用hwaccel时,dxva2_retrieve_data_call和sws_swale会消耗大量时间......
有没有办法在Qt中显示NV12图片(没有sws_scale转换),有没有办法优化dxva_retrieve_data_call?
答案 0 :(得分:0)
如果您想要真正的GPU加速(无需复制),您需要通过IDirect3DDeviceManager9(Directx9)/ IMFDXGIDeviceManager(Directx11)提供DirectX Surface。 QT和FFMPEG不为您提供。您还需要提供DirectX显示机制。