У меня есть кодер x264, производящий NALU из необработанного видеопотока. Мне нужно отправить эти NALU по сети. Каков наилучший способ сделать это?
Энкодер вставлен в граф DirectShow, это фильтр преобразования, и ниже по течению у меня есть фильтр, который управляет сетью. Могу ли я передать NALU, созданные фильтром преобразования, непосредственно в сетевой фильтр «рендеринга»? Это создаст некоторые проблемы с памятью?
Я хотел бы знать, как память, выделенная для NALU, обрабатывается внутри x264 — кто отвечает за ее освобождение? Также мне интересно, могу ли я просто сериализовать NALU в битовый поток вручную, а затем пересобрать его таким же образом?
Мне нужно отправить эти NALU по сети. Каков наилучший способ сделать это?
«Лучшее» требует уточнения: проще всего сделать, лучше всего с точки зрения совместимости, совместимо с конкретной реализацией аналога и т. Д.
Могу ли я передать NALU, созданные фильтром преобразования, непосредственно в сетевой фильтр «рендеринга»? Это создаст некоторые проблемы с памятью?
Рендерера со стандартной сетью нет, вы должны прочитать о том, как это нужно сделать с конкретным рендерером, который вы собираетесь использовать.
Я хотел бы знать, как память, выделенная для NALU, обрабатывается внутри x264 — кто отвечает за ее освобождение?
x264 управляет буферами, которые он заполняет, x264_encoder_encode
возвращает вам ссылки на эти буферы, и вам не нужно освобождать данные, просто обязательно скопируйте их своевременно, так как они будут аннулированы при следующем вызове. Не забывай x264_encoder_close
впоследствии — он освободит все ресурсы, управляемые изнутри.
Также мне интересно, могу ли я просто сериализовать NALU в битовый поток вручную, а затем пересобрать его таким же образом?
Да, ты можешь сделать это. Если ваша сетевая пара фильтров может воспроизводить один и тот же поток, выполняя сетевые операции на их внутреннем соединении, то это будет работать нормально. Наилучшим сетевым протоколом с точки зрения взаимодействия с H.264 является RTP. Однако это довольно сложно по сравнению с простым принятием / отправкой / получением / воспроизведением шагов для битового потока.
Лучший способ отправить NALU в сеть — через поток RTP. смотреть на RFC 6184 для деталей о пакетировании RTP для H.264. Я думаю, что вы можете безопасно передать NALU своему средству визуализации, если ваши медиа-буферы достаточно велики, чтобы содержать вас NALU.