Рендеринг RTSP H.264 видеопотока с использованием live555

Я был бы признателен за пример использования библиотеки Live555 для рендеринга живых потоков на экран. Очевидно это просто, но это действительно помогло бы увидеть, что это сделано, а не просто прочитать, что «это просто» !. Gmane на сайте говорится:

«Обновить (копию) кода« testRTSPClient »так, чтобы он отображал видеоданные, довольно просто: вам просто нужно изменить класс« DummySink », чтобы Это выполняет рендеринг (или вызывает библиотеку декодера для рендеринга). В частности, вы бы изменили реализацию функции afterGettingFrame () в строке 479. Вот и все!

(На самом деле, для видео H.264 вам, вероятно, придется сделать еще одну вещь. Потоки H.264 имеют информацию о внеполосной конфигурации (блоки SPS и PAL NAL), которую вам, возможно, потребуется передать на декодер для его инициализации. Чтобы получить эту информацию, вызовите «MediaSubsession :: fmtp_spropparametersets ()» (для объекта «subsession» видео). Это даст вам (ASCII) символьную строку. Затем вы можете передать ее в «parseSPropParameterSets () «, чтобы сгенерировать двоичные блоки NAL для вашего декодера.)
«

PS: я использую visual studio и windows

1

Решение

Я делал нечто подобное в предыдущей работе. Хитрость заключалась в том, чтобы использовать DirectShow для рендеринга. По сути, live555 ничего не декодирует и не визуализирует, вам нужен какой-то декодер h264, а также видеоповерхность. К счастью для вас, DirectShow предоставляет и то, и другое, но для работы нужно довольно много программирования.

live555 предоставляет только механизм для потоковой передачи. Это означает, что он будет принимать пакеты NAL (если хотите, пакеты h264) из сети или источника файлов и отправлять их в «DummySink», вам все равно нужно будет декодировать (преобразовать блоки NAL в битовые карты) и сделать (нарисовать растровые изображения на экране). Это не то, что live555 сделает для вас, но другие библиотеки могут, например, ffmpeg, но мне не удалось заставить его работать, поэтому мы перешли к решению DirectShow. А именно, «MS DTV-DVD Decoder» был очень полезен и мог использовать некоторое аппаратное ускорение, обеспечиваемое чипсетом, который мы использовали (автоматически). Еще одна полезная функция live555 заключается в том, что он будет обрабатывать управляющие протоколы, такие как RTSP, для обработки запросов PLAY / STOP / PAUSE для потока.

РЕДАКТИРОВАТЬ: так как вы ищете код, я нашел с открытым исходным кодом Фильтр DirectShow, использующий live555 для тебя. Вы должны быть в состоянии запустить это с чем-то вроде GraphStudio или GraphEdit. В конце концов, вы могли бы научиться создавать графики DirectShow в C ++. Это действительно не очень сложно, так как множество примеров уже существует. Самым сложным является создание фильтров, но декодер и средство визуализации уже готовы для вас, и я предоставил вам фильтр исходного кода.

2

Другие решения

Другой пример кода, использующего live555 в Windows, доступен на проект обработки видео. Как и предложение Эрика, он использует DirectShow (который является стандартным способом в Windows pre MediaFoundation. Код с использованием live можно найти Вот.

Если вы используете Windows 7, есть встроенный декодер H.264, который будет вставлен в медиа-конвейер при рендеринге графика. В более ранних версиях Windows вам придется установить собственный фильтр декодера H.264.

Отказ от ответственности: я являюсь одним из авторов проекта обработки видео.

1

По вопросам рекламы [email protected]