DirectX против FFmpeg - PullRequest
       71

DirectX против FFmpeg

0 голосов
/ 19 января 2019

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

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

Я новичок, но думаю, что можно декодировать кадр напрямую через directx или через ffmpeg.я прав?если да, какой из них предпочтительнее?

1 Ответ

0 голосов
/ 06 февраля 2019

Для простого подхода и простого кода, использующего только GPU, взгляните на мой проект с использованием DirectX: H264Dxva2Decoder

Если вы готовы писать код, вы можете использовать мой подход.

Если нет, вы можете использовать MediaFoundation или FFMPEG, оба могут выполнять эту работу.

MediaFoundation ориентирован на C ++ и COM.FFMPEG ориентирован на C.Это может иметь значение для вас.

РЕДАКТИРОВАТЬ

Вы можете использовать мою программу, потому что у вас есть кадры, закодированные в H264 или H265.Для h265 вам придется добавить дополнительный код.

Конечно, вам нужно внести изменения.И да, вы можете отправлять кадры в DirectX без использования файла.В этом проекте используется только формат видеофайлов avcc, но его можно изменить в других случаях.

Вам не нужен анализатор атомов.Вам необходимо изменить синтаксический анализатор nalu, если, например, фреймы имеют формат приложения-b.Вам также нужно будет изменить механизм буферизации, если кадры имеют формат приложения-b.

Я могу вам помочь, если вы предоставите образцы кадров, закодированные в H264.

О Ffmpeg у него меньшеограничения, чем моя программа, в соответствии со спецификациями h264, но не обеспечивает механизм рендеринга.Например, вам придется смешать Ffmepg и мой механизм рендеринга.

Или изучить программу типа MPC-HC, которая показывает микс.Я не могу больше здесь помогать.

РЕДАКТИРОВАТЬ 2

Одна вещь, которую нужно знать, вы не можете декодировать закодированные пакеты напрямую в GPU.Вы должны разобрать их раньше.Вот почему есть анализатор nalu (см. DXVA_PicParams_H264).

Если вы не готовы писать код и понимать, как он работает, используйте Ffmpeg, в действительности это будет проще.Вы можете сосредоточиться на рендеринге, а не на декодировании.

Также важно знать, какой из них дает лучший результат, потребляет меньше ресурсов (CPU, GPU, RAM (как системная память, так и память видеокарты),поддерживает более широкий диапазон форматов и т. д.

Вы просите реальной экспертизы ...

Если вы создадите собственную программу, вы сможете оптимизировать ее и, конечно же, получитьлучшие результаты. Если вы используете Ffmpeg, и у вас есть проблемы с производительностью в вашем контексте, вы можете быть заблокированы ... потому что вы не будете изменять Ffmpeg.

Вы говорите, что будете использовать камеры Bosch. Как правило, все закодированное видеобудет в том же формате. Так что, как только ваш код сможет его декодировать, вам не нужны все функции Ffmpeg.

...