Android:通过RTP(G.711 PCMU)将.wav发送到SIP-Phone非常嘈杂,基于SipDroid / MjSIP的噼啪声

我想从我的android向软电话(x-lite)发送(仅发送).wav文件,以便x-lite上的被叫人可以听到.wav文件的声音。

场景如下:Android和x-lite都在同一个WLAN中,都连接到FreeSwitch。 我可以从Android手机拨打x-lite。 如果在x-lite上接受了调用,则android发送.wav文件,我可以在wireshark中看到RTP pakets(G.711 PCMU)从手机发送到x-lite。 我能听到一些声音,但不是我所期待的声音。 相反,它的噼啪声,嘈杂声和一些哔哔声。

那么我发送给x-lite的SDP有问题吗?

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(); 

如果我在Wireshark中关注UDP Stream,则开头如下所示:

…….. M … RIFF …. WAVEfmt …….. D ……….. data0 ……….. ………………..中号……………………….. ………………………………………>中号… ………………………………………….. …………………]中号……………………… ……………………………………….. | M。 ……………….. ………………….. ….. .. ………………… M ……….. …………….. …….. ………………………………. M …. ………………………………………….. ….. …………… M ……………………….. ……………… ……. + … 5 … 8 ……….. M … 6 …… + .’…- ……(…..#… – … + …… ………………. …….. ……….. M ………………………… …………………………………. …… 6M …… …… …………………………………….. ……………. UM ………..-… 1 … 0 …,…)…’。 ..0 …?… =#’。$。 。!………………..Tm值……………………… .. $ ………………….. …..&………. …. M … …………………… …………………….. ………,………..中号… = …我。W …,J … / …….. ………….#… <…的… Z …乙……………..中号.. ……#… 5 … 5 ………………. ……“…… ….. ……. 5.WL..N ………..中号。C … 8.M’:R …> … O。。。p …〜.. .e ……我…… 3 …… ……………………….. M ……. …………………………………….. …… …………….. M …… 5 … R … L … 3 … / … B … Z。 ..b …… ...X...B...!.........{............MM.........$...2...(........................................................lM...............................-.!.RJ].sZtUcb .qv …. y ……….. M … h … V … Y … c … lfE * ….. ……………………(… E … X ………..中号…,J。 ..5.H.7.5。^ …〜…,J ……………..(。=。ħ……… F。 …. Q …(………中号….. EX .. {… L.2 ……………: ……. Q ……. v ……….. …………. M ……… …….. 0内容S … K … 7。+。乙…………………&… Ø…] ………..中号… rB中 …… w ^ … … 8.问?……一个……> ……………….)… /。

所以我猜它不是空的。 在信号开始之后,一些信号从x-lite发送到android,然后再从android到x-lite发送一些pakets ……依此类推

任何人都可以给我一个提示,为什么我听不到声音?

(也欢迎其他解决方案)编辑:

这是MjSip的RTPStramSender实现: http ://pastebin.com/xU4EdEex

编辑2:我将RFC中的SDP更改为:

  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

我的怀疑是包装。

此RFC告诉您如何完成它: RFC 5391

事实certificate这有点帮助,但并非一直如此。 如果有人能提供帮助并且有效,请接受他的回答而不是我的回答。