Как декодировать необработанные кадры H264

Мне нужно разработать полноэкранный клиент, который будет декодировать необработанные кадры h264 из сетевого источника. Любой предложенный подход к тому, с чего начать? Я смотрел на ffmpeg, но потом мне нужно было связать его с VS, и я теряюсь по пути туда. Microsoft Media Foundation имеет встроенный декодер h264, и нет достаточно простого примера, чтобы я мог его понять. То же самое с DirectShow, но затем Microsoft говорит, что его вымершая технология не использует его. клиент должен иметь возможность работать на WinXP и более поздних версиях. Так что, если кто-нибудь может указать мне в правильном направлении, это было бы здорово.


person user2967920    schedule 20.11.2013    source источник


Ответы (1)


Вы правильно перечислили варианты, и вы правы, утверждая, что простого примера нет. Сама технология немного сложна, и обычно она используется не сама по себе, а как часть более сложной системы, такой как потоковый клиент. Кроме того, эта технология не является бесплатной, и не существует общедоступной реализации декодера H.264 «по умолчанию».

FFmpeg — хороший выбор, если вы хорошо работаете с LGPL/GPL и можете собрать его из исходного кода (с GPL вы даже можете скачать предварительно собранные бинарники), взаимодействие с VS требует некоторых усилий, но выполнимо, большая проблема заключается в отсутствии документации, поэтому вам нужно искать фрагменты кода в Интернете.

Media Foundation не годится: в Windows XP нет декодера Media Foundation H.264. Тогда сам API не популярен, и единственное преимущество, которое он предлагает, — это доступность в ненастольных версиях Windows, не имеющих DirectShow.

DirectShow — лучший нативный мультимедийный API в Windows. С обратной совместимостью в Windows он доступен от Windows XP до Windows 8.1. Microsoft предоставляет достойный декодер H.264 для запуска Windows Vista — Microsoft DTV-DVD Video Decoder, то есть в тех же версиях декодер доступен через Media Foundation. Такие сторонние декодеры обычно подключаются к DirectShow. Существует аппаратная поддержка декодирования, множество примеров кода и учебных пособий в Интернете. Хотя немного крутая кривая обучения.

person Roman R.    schedule 20.11.2013
comment
Я выполнил работу с помощью ffmpeg. Входной сетевой поток -> FFMPEG -> SDL (для отрисовки видео на экране) Задержка составляет около 200 мс для 1280x720 @ 30 кадров в секунду при битрейте 3 Мбит / с :) - person user2967920; 11.12.2013