Количество пакетов RTP в одной дейтаграмме UDP - PullRequest
0 голосов
/ 12 марта 2020

Я работаю над реализацией RTP на встроенном MCU (STM32F4), и у меня возникают проблемы с эффективной потоковой передачей аудиоданных (8 кГц, в кодировке u-law).

Для порции аудиоданных (20 мс, 160 байт) я должен:

  1. отправить один RTP-пакет (12-байтовый заголовок + 160 байт аудио) по одной дейтаграмме UDP или
  2. Отправка нескольких пакетов RTP через одну дейтаграмму UDP (поскольку мы можем разместить несколько в пределах одного MTU UDP)

Если (2), то для каждого заголовка RTP должен быть 160 байтов аудиоданных в пределах одной дейтаграммы UDP. Например, 5 пакетов RTP были бы 800 байтами аудиоданных - я бы отправил:

  • RTP_Header-> Audio_data (160 байтов) -> RTP_Header-> Audio_data (160 байтов) -> RTP_Header-> Audio_data (160 байт) ...
  • RTP_Header-> Audio_data (800 байт)

Используя LinPhone в качестве клиента для тестирования, я замечаю несколько пакетов Out of Time и короткий задержка с момента, когда я говорю в мое встроенное устройство, до того, когда я слышу его на Linphone; и я пытаюсь отследить, исправит ли это более эффективная потоковая передача данных через UDP. У меня нет той же задержки при разговоре на LinPhone и воспроизведении с моего встроенного устройства, и задержка между ними оказывается трудной для эхоподавления на встроенном MCU.

1 Ответ

1 голос
/ 12 марта 2020

Учитывая, что RTP предназначен для данных в реальном времени и что каждая полезная нагрузка RTP рассчитана на определенное c время, нет смысла объединять несколько данных RTP (взятых из разных времен) вместе в один пакет UDP. Это означает, что каждая полезная нагрузка RTP имеет префикс заголовка RTP, который затем немедленно отправляется через UDP.

...