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

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

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

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

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

2 ответа

Я делал нечто подобное в предыдущей работе. Хитрость заключалась в том, чтобы использовать 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++. Это действительно не очень сложно, так как множество примеров уже существует. Самым сложным является создание фильтров, но декодер и средство визуализации уже готовы для вас, и я предоставил вам фильтр исходного кода.

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

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

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

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