Android: отправка.wav на SIP-телефон через RTP (G.711 PCMU), очень шумный, потрескивающий звук на основе SipDroid/MjSIP
Я хочу передать (только для отправки) файл.wav с моего андроида на программный телефон (x-lite), чтобы вызываемый человек на x-lite мог слышать звук файла.wav.
Сценарий таков: Android и x-lite оба находятся в одной и той же WLAN и оба подключены к FreeSwitch. Я могу позвонить X-Lite с телефона Android. Если вызов принят на x-lite, андроид отправляет файл.wav, и я вижу в wireshark, что пакеты RTP (G.711 PCMU) отправляются с телефона на x-lite. Я слышу звук, но не тот, который ожидал. Вместо этого треск, шум и гудки.
Так есть ли проблема в SDP, который я отправляю в x-lite?
v=0
o=sip:1002@192.168.2.110 0 0 IN IP4 192.168.2.100
s=MySession
c=IN IP4 192.168.2.110
t=0 0
m=audio 8000 RTP/AVP 0 8 101
a=rtpmap:101 telephone-event/8000
Или проблема в том, как я отправляю.wav?
DatagramSocket socket = null;
RtpStreamSender sender = null;
int port =8000;
int payload_type = 0;
int frameSize = 64;
int frameRate =32;
socket = new DatagramSocket(port);
FileInputStream audioInput = new FileInputStream(f); //f is the .wav
sender = new RtpStreamSender(audioInput, true, payload_type, frameRate, frameSize, remoteAddress, remotePort);
sender.setSyncAdj(2);
sender.start();
Если я буду следовать UDP-потоку в Wireshark, начало будет выглядеть так:
........ M... RIFF.... WAVEfmt........ D........... data0............................... М..........................................................................>M..........................................................................] М..........................................................................|M..................... ....................... ..... .......................M........... ......................... ..................................... М........................................................... ...............M............................................... .......+...5...8...........M...6...+.'...-...(.....#...-...+... ........................... ...........M...................................................................... ...6M......... ... ............................................................UM...........-1...... 0...,...)... "...0...?... =. #. '. $..!............................................... ^ м.. $............................ &.............. M..............................................................,........... М... =... Я... W... J... /..................... #...<... T... Z... B................. М..... #... 5... 5................... ... "............... 5.WL..N........... M... C... 8.m.. R...>... O... р... ~...е... я... 3................................ М.......................................................................... M...... 5... R... L... 3... /... B... Z...b...
...X...B...!.........{............MM.........$...2...(........................................................lM...............................-.!.R.J.].s.Z.t.U.c.b.
.qv.... у........... M... ч... V... Y... с... LFE *............................. (... Е... Х........... М... J... 5.h.7.5. ^... ~... J................. (. =. ч......... F..... Q... (......... M..... EX.. {... L.2...............:.......Q....... v........................ М................. 0... S... K... 7. +. B &........................ О...]........... M... гв...... ж... 8.Q...?... A...>...................)... /.
Так что я думаю, что это не пусто. После начала сигнала некоторый сигнал отправляется с x-lite на андроид, а затем снова несколько пакетов с андроида на x-lite... и так далее
Кто-нибудь может дать мне подсказку, почему я не слышу звук?
(Другие решения также приветствуются) Редактировать:
это реализация RTPStramSender от MjSip: http://pastebin.com/xU4EdEex
Изменить 2: я изменил SDP, как в RFC:
m=audio 54874 RTP/AVP 96 97 0 8
a=rtpmap:96 PCMU-WB/16000
a=rtpmap:97 PCMA-WB/16000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
Но ничего не случилось. Я изменил размер кадра и частоту кадров, но треск только становится быстрее или медленнее
Редактировать 3: реализация RtpPacket: http://pastebin.com/tDLr5CYF
1 ответ
Мое подозрение - упаковка.
Этот RFC говорит вам, как это должно быть сделано: RFC 5391
Оказалось, что это немного помогло, но не до конца. Если кто-то может помочь, и это работает, пожалуйста, примите его ответ, а не мой.