Сериализация и обработка NALU x264

У меня есть кодер x264, производящий NALU из необработанного видеопотока. Мне нужно отправить эти NALU по сети. Каков наилучший способ сделать это?

Энкодер вставлен в граф DirectShow, это фильтр преобразования, и ниже по течению у меня есть фильтр, который управляет сетью. Могу ли я передать NALU, созданные фильтром преобразования, непосредственно в сетевой фильтр «рендеринга»? Это создаст некоторые проблемы с памятью?

Я хотел бы знать, как память, выделенная для NALU, обрабатывается внутри x264 — кто отвечает за ее освобождение? Также мне интересно, могу ли я просто сериализовать NALU в битовый поток вручную, а затем пересобрать его таким же образом?

0

Решение

Мне нужно отправить эти NALU по сети. Каков наилучший способ сделать это?

«Лучшее» требует уточнения: проще всего сделать, лучше всего с точки зрения совместимости, совместимо с конкретной реализацией аналога и т. Д.

Могу ли я передать NALU, созданные фильтром преобразования, непосредственно в сетевой фильтр «рендеринга»? Это создаст некоторые проблемы с памятью?

Рендерера со стандартной сетью нет, вы должны прочитать о том, как это нужно сделать с конкретным рендерером, который вы собираетесь использовать.

Я хотел бы знать, как память, выделенная для NALU, обрабатывается внутри x264 — кто отвечает за ее освобождение?

x264 управляет буферами, которые он заполняет, x264_encoder_encode возвращает вам ссылки на эти буферы, и вам не нужно освобождать данные, просто обязательно скопируйте их своевременно, так как они будут аннулированы при следующем вызове. Не забывай x264_encoder_close впоследствии — он освободит все ресурсы, управляемые изнутри.

Также мне интересно, могу ли я просто сериализовать NALU в битовый поток вручную, а затем пересобрать его таким же образом?

Да, ты можешь сделать это. Если ваша сетевая пара фильтров может воспроизводить один и тот же поток, выполняя сетевые операции на их внутреннем соединении, то это будет работать нормально. Наилучшим сетевым протоколом с точки зрения взаимодействия с H.264 является RTP. Однако это довольно сложно по сравнению с простым принятием / отправкой / получением / воспроизведением шагов для битового потока.

1

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

Лучший способ отправить NALU в сеть — через поток RTP. смотреть на RFC 6184 для деталей о пакетировании RTP для H.264. Я думаю, что вы можете безопасно передать NALU своему средству визуализации, если ваши медиа-буферы достаточно велики, чтобы содержать вас NALU.

1

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