Для приложения мониторинга качества речи VoIP мне нужно сравнить входящий аудиопоток RTP с опорным сигналом. Для сравнения сигналов я использую уже существующие специальные инструменты. Для других частей (кроме захвата пакетов) библиотека Gstreamer казалась хорошим выбором. Я использую следующий конвейер для моделирования пустых VoIP-клиентов:
filesrc location=foobar.pcap ! pcapparse ! "application/x-rtp, payload=0, clock-rate=8000"
! gstrtpjitterbuffer ! rtppcmudepay ! mulawdec ! audioconvert
! audioresample ! wavenc ! filesink location=foobar.wav
Файл pcap содержит один поток мультимедиа RTP. Я создал файл захвата, в котором отсутствуют 50 оригинальных 400 дейтаграмм UDP. Для данного аудиосэмпла (в моем примере это 8 секунд):
[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX]
с определенным количеством последовательных потерь пакетов. Я ожидаю, что такой звуковой сигнал будет выводиться («-
» обозначает тишину):
[XXXXXXXXXXXXXXXXXXXXXXXX-----XXXXXXXXXXX]
однако, что на самом деле сохраняется в аудиофайле, так это (на 1 с меньше для моего примера):
[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX]
Кажется, что буфер дрожания, важная часть для этого приложения, не работает должным образом. Может ли это быть несовместимостью с / недостатком элемента pcapparse
? Я пропускаю ключевую часть в конвейере, чтобы обеспечить синхронизацию времени? Что еще может быть причиной этого?