Я работаю над реализацией RTP на встроенном MCU (STM32F4), и у меня возникают проблемы с эффективной потоковой передачей аудиоданных (8 кГц, в кодировке u-law).
Для порции аудиоданных (20 мс, 160 байт) я должен:
- отправить один RTP-пакет (12-байтовый заголовок + 160 байт аудио) по одной дейтаграмме UDP или
- Отправка нескольких пакетов 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.