我制作了一个带有FFMPEG I代码的IP相机播放器(fullHD H264),在windows下使用is,我需要尽可能低的延迟,并且我能得到的最好的结果是:
但是对于“慢”CPU,如果比特率太高或者不能处理1080 p,我就会有很多延迟。
我真的很想用DXVA2来尝试硬件加速,看看我是否能获得更好的性能,尤其是在最慢的CPU中。
但我真的不知道该怎么做。我必须用--启用-dxva2 2和-启用-hwaccel=H 264_dxva2 2构建FFMPEG?或者Zeranoe构建--我从来没有使用过Direct,我需要直接X知识,还是使用--启用-dxva2 2和--启用-hwaccel=H 264_dxva2 2来照顾所有的东西?
谢谢
编辑:
你好,我用这篇文章来帮助我使用FFMPEG Failed to execute: 0x80070057, when decoding video via ffmpeg with dxva2进行HW加速。
我用
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倍的内存,以及很多损坏的帧。它在较新的计算机上更好,但软解码器更好。dxva2_retrieve_data_call和sws_swale在启用hwaccel时消耗大量时间.
有没有一种方法可以在Qt中显示NV12图片(没有sws_scale转换),并且有一种优化dxva_retrieve_data_call的方法?
发布于 2016-02-05 20:20:58
如果您想要真正的GPU加速(没有副本返回),您需要通过IDirect3DDeviceManager9(Directx9)/IMFDXGIDeviceManager(Directx11).提供DirectX曲面QT和FFMPEG不为您提供它。您还需要提供DirectX显示机制。
https://stackoverflow.com/questions/34719449
复制相似问题