Почему проигрыватель видео теряет некоторые из первых кадров живого потока RTP? - PullRequest
0 голосов
/ 17 ноября 2011

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

1 Ответ

0 голосов
/ 17 ноября 2011

Существует несколько возможностей:

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

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

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

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

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

...