Как фрагментировать пакеты H264 в RTP, совместимом с RFC3984

У меня есть базовое потоковое видео h264 FFMPEG, которое мне нужно инкапсулировать в RTP и отправить на SIP-телефоны для их декодирования. Я использую Linphone с плагином h264 для Windows и Mirial для прогресса декодирования. Однако иногда я получаю огромный размер кадра (3Kb ~ 9Kb) из FFMPEG, что явно не вписывается в MTU.

Если я отправляю эти кадры «как есть» и доверяю функции IP-фрагментации, некоторые телефоны могут воспроизводить их достаточно хорошо, а другие подавляются и не могут декодировать поток. Я думаю, это связано с тем, что поток не соответствует RFC 3984, который определяет, что пакеты, которые не помещаются в MTU, должны быть разделены на разные NALU и помечать конец кадра с помощью функции Mark RTP.

Как мне узнать, где я могу «разрезать» рамку I или P? Я заметил, что фрагментированные пакеты h264 (без метки Mark) иногда заканчиваются на 0xF8, но не могут получить шаблон, а в RFC 3984, который описывает, как отправлять эти пакеты через RTP, не указано, как это сделать.

ОБНОВЛЕНИЕ: Кто-нибудь знает, как сообщить библиотеке X264, как генерировать NALU максимального размера? таким образом я смогу избежать этой проблемы. Спасибо всем

11
задан Pierluigi Cifani 11 April 2011 в 15:04
поделиться