DirectX против FFmpeg

Я нахожусь в процессе решения, как декодировать полученные видеокадры, основываясь на следующем:

  1. Платформа Windows.
  2. кадры кодируются в H264 или H265.
  3. GPU следует использовать как можно больше
  4. конечно, мы предпочитаем меньше кода и самый простой код. нам просто нужно декодировать и показать результат на экране. запись не требуется, ничего больше.

все же я новичок, но я думаю, что можно декодировать кадр напрямую через 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.

Другие вопросы по тегам