Вторую неделю общался с поддержкой Grandstream, выясняя что за проблема с качеством голоса возникает в моём конкретном случае. Самая первая версия оказалась правильной, но потребовалось подтвердить, что во всему причиной RTP передаваемый с шлюза. Для этого мне предложили изменить размер голосового пакета на шлюзе, что оказалось невозможным. Таким образом возникла возможность воспользоваться SIPP и недавно выложенным скриптом sniff2sipp
Для начала у меня имелся дамп сетевого трафика (SIP и RTP) с плохим качеством звука и с нормальным. Требовалось взять SIP сигнализацию из первого трейса, а RTP из второго и сделать сценарий комбинирующий их. Таким образом было бы доказано, что GXV-3000 некачественно воспроизводит голос, если величина голосового пакета меньше, чем предполагаемая телефоном (значение ptime в SDP).
Использование sniff2sipp не вызвало никаких проблем, всё как написано в инструкции, только требуется установить несколько Perl библиотек функций из CPAN. Так же требуется установленный wireshark или tcpdump. В итоге получилось два xml сценария для тестирования и два pcap файла с голосовыми пакетами. В первом xml сценарии заменяется имя файла с голосом и приступаем к экспериментам с sipp. В результате недолгих ковыряний у меня получилась следующая команда (немного отличающаяся от оригинала):
1 2 3 |
<strong>/usr/bin/sipp -sf 195.162.17.118:5060.xml 192.168.32.82:5070 -d 20000 \ -s 79045830000 -m 1 -i 192.168.32.1 -mi 192.168.32.1 -mp 65000</strong> |
По пунктам объясняю значения параметров:
-
1-sf 195.162.17.118:5060.xml
— файл с полученным сценарием -
1192.168.32.82:5070
— адрес и порт куда отправлять пакеты сигнализации -
1-d 20000
— длительность звонка, до отправки BYE -
1-s 79045830000
— содержимое поля From, если этот параметр не указать будет использовано значение service -
1-m 1
— совершить только один вызов -
1-i 192.168.32.1
— интерфейс для отправки сигнализации -
1-mi 192.168.32.1
— интерфейс для отправки RTP -
1-mp 65000
— порт для отправки RTP
Обратите внимание, чтобы на телефоне был отключен STUN и вообще любое определение NAT, это может вызвать интересные эффекты: медиа поток будет направлен не туда.