DirectX против FFmpeg
Я нахожусь в процессе решения, как декодировать полученные видеокадры, основываясь на следующем:
- Платформа Windows.
- кадры кодируются в H264 или H265.
- GPU следует использовать как можно больше
- конечно, мы предпочитаем меньше кода и самый простой код. нам просто нужно декодировать и показать результат на экране. запись не требуется, ничего больше.
все же я новичок, но я думаю, что можно декодировать кадр напрямую через directx или через ffmpeg. я прав? если да, какой из них предпочтительнее?
1 ответ
Для простого подхода и простого кода с использованием только графического процессора, взгляните на мой проект с использованием DirectX: H264Dxva2Decoder
Если вы готовы писать код, вы можете использовать мой подход.
Если нет, вы можете использовать MediaFoundation или FFMPEG, оба могут сделать эту работу.
MediaFoundation ориентирован на C++ и COM. FFMPEG ориентирован на C. Это может иметь значение для вас.
РЕДАКТИРОВАТЬ
Вы можете использовать мою программу, потому что у вас есть кадры, закодированные в H264 или H265. Для h265 вам придется добавить дополнительный код.
Конечно, вам нужно внести изменения. И да, вы можете отправлять кадры в DirectX без использования файла. В этом проекте используется только формат видеофайлов avcc, но его можно изменить в других случаях.
Вам не нужен анализатор атомов. Вам необходимо изменить синтаксический анализатор nalu, если, например, фреймы имеют формат приложения-b. Вам также нужно будет изменить механизм буферизации, если кадры имеют формат приложения-b.
Я могу вам помочь, если вы предоставите образцы кадров, закодированных в H264.
Что касается Ffmpeg, он имеет меньше ограничений, чем моя программа, согласно спецификациям h264, но не предоставляет механизм рендеринга. Например, вам придется смешать Ffmepg и мой механизм рендеринга.
Или изучите такую программу, как MPC-HC, которая показывает сочетание. Я не могу больше здесь помогать.
РЕДАКТИРОВАТЬ 2
Одна вещь, которую нужно знать, вы не можете декодировать закодированные пакеты напрямую в графический процессор. Вы должны разобрать их раньше. Вот почему есть анализатор nalu (см. DXVA_PicParams_H264).
Если вы не готовы писать код и понимать, как он работает, используйте Ffmpeg, в действительности это будет проще. Вы можете сосредоточиться на рендеринге, а не на декодировании.
Также важно знать, какой из них дает лучший результат, потребляет меньше ресурсов (процессор, графический процессор, оперативная память (как системная память, так и память графической карты), поддерживает более широкий диапазон форматов и т. Д.
Вы просите реальной экспертизы...
Если вы закодируете свою собственную программу, вы сможете оптимизировать ее и, безусловно, получить лучшие результаты. Если вы используете Ffmpeg, и у вас есть проблемы с производительностью в вашем контексте, вы можете быть заблокированы... потому что вы не будете изменять Ffmpeg.
Вы говорите, что будете использовать камеры Bosch. Обычно все закодированное видео будет в одном формате. Поэтому, как только ваш код сможет его декодировать, вам не нужны все функции Ffmpeg.