Почему видеопроигрыватель теряет некоторые из первых кадров живого потока RTP?

Я написал RTSP-сервер. Он отправляет данные потока h246 / AAC через RTP / UDP. Интервал отправки пакетов RTP для видео составляет 30 мс, для звука - 20 мс. Метки времени извлекаются из тега flv (мой сервер получает видео и аудиоданные из файла flv). Видеопроигрыватель теряет несколько первых видеокадров. В результате звук опережает видео на несколько секунд. Почему это? Стоит ли делать паузу перед потоковой передачей на стороне сервера?


person radya    schedule 17.11.2011    source источник


Ответы (1)


Есть несколько возможностей:

  • UDP - ненадежный протокол. Вы можете проверить порядковые номера RTP, чтобы узнать, так ли это и сколько / какие кадры были отброшены. Что может помочь минимизировать потерю пакетов UDP, так это увеличение размера буфера приема UDP на клиенте. Вот пример того, как это сделать на Linux. Конечно, вы можете делать то же самое с окнами.

  • Клиент может правильно декодировать видео только после получения кадра IDR. До этого момента он не может правильно декодировать видео. Является ли первый кадр, который вы транслируете новому клиенту, IDR-кадром (учитывая, что он все еще может быть потерян).

В любом случае мне кажется, что есть еще одна проблема с вашим приложением видеоплеера: даже если кадры пропадают, проигрыватель отвечает за буферизацию и синхронизацию аудио и видео и должен иметь возможность делать это независимо от потери пакетов.

В чисто информативном плане вы также можете реализовать RTP / RTCP с чередованием по RTSP (и, следовательно, по TCP). Таким образом, вам не нужно беспокоиться о пропущенных кадрах. Библиотеки, такие как live555 библиотека потокового мультимедиа и VLC поддерживают это.

Отвечая на ваш последний вопрос о паузе: нет, это не имеет к этому никакого отношения. RTSP - это чисто сигнальный протокол. Потеря пакетов будет происходить на транспортном (UDP) уровне.

person Ralf    schedule 17.11.2011
comment
Подробную информацию о решенной проблеме вы можете прочитать в моей статье (только на русском языке) - ›Inventos.ru/2012/02/15/kak-nadezhno-dostavit-video/#more-1234 - person radya; 21.02.2012
comment
@scame Когда-нибудь вам стоит подумать о создании английской версии, я был бы готов вычитать английскую ... - person Ralf; 21.02.2012