Я сделал плеер для IP-камеры (fullHD H264) с FFMPEG
Я кодирую под Windows с помощью Qt. Мне нужно как можно меньшее время ожидания, и лучший результат, который я могу получить, достигается с помощью:
Но с «медленным» процессором у меня большая задержка, если битрейт слишком высок или он не может обрабатывать 1080p.
Я действительно хочу попробовать аппаратное ускорение с DXVA2, чтобы посмотреть, смогу ли я получить более высокую производительность, особенно на самых медленных процессорах.
Но я действительно не знаю, как поступить. Я должен собрать FFMPEG с —enable-dxva2 и —enable-hwaccel = h264_dxva2? или зераное строение
Я никогда не использовал Direct X, мне нужно знание Direct X или ffmpeg с опциями —enable-dxva2 и —enable-hwaccel = h264_dxva2?
Спасибо
Редактировать :
Здравствуйте, я использую этот пост, чтобы помочь мне в моем ускорении HW с FFMPEG
Не удалось выполнить: 0x80070057, при декодировании видео через ffmpeg с помощью 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);
Редактировать :
Проблема решена. Я не проверял, получил ли я фотографию, прежде чем ее получить.
Но производительность моего настольного компьютера очень низкая (Intel Core i5 650, 4 ГБ ОЗУ, ATI HD5800), он потребляет на 5% больше ЦП, в 3 раза больше ОЗУ и много поврежденных кадров.
Это лучше на более новом компьютере, но мягкий декодер лучше.
dxva2_retrieve_data_call и sws_swale занимают много времени, когда включен hwaccel …
Есть ли способ отобразить картинку NV12 в Qt (без преобразования sws_scale) и есть способ оптимизировать dxva_retrieve_data_call?
Если вы хотите реального ускорения графического процессора (без копирования), вам необходимо предоставить DirectX Surface через IDirect3DDeviceManager9 (Directx9) / IMFDXGIDeviceManager (Directx11). QT и FFMPEG не предоставляют его вам. Вам также потребуется предоставить механизм отображения DirectX.
Других решений пока нет …