小编典典

Android:通过RTP(G.711 PCMU)将.wav发送到SIP电话,基于SipDroid / MjSIP的声音非常吵杂

java

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

情况如下:Android和x-lite都在同一WLAN中,并且都连接到FreeSwitch。我可以从Android手机拨打x-lite。如果在x-
lite上接受了呼叫,则android将发送.wav文件,我可以在Wireshark中看到RTP包(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流,则开始看起来像这样:

..... UM ...........-… 1 … 0 …,…)…’… 0 … ?…
=。#。’。$。。!....................Tm值........................... .. $
....................... .....&.......... .... M …
.......................................................................................
.........,........... M … = …我… W … J … / ..... .............#…
<… T … Z … B ........ M .. …#… 5 … 5 ................... …“
............. 5.WL..N ........... M … C … 8.m。’。 [R … > … O。。。p
…〜… E …我… 3 …
.................. ...... M
..................................... ............. .......................
M ...... 5 … R .. .L … 3 … / … B … Z … b ....
...X...B...!.........{............MM.........$...2...(........................................................lM...............................-.!.R.J.].s.Z.t.U.c.b.qv
.... y ........... M … h .. .V … Y … c … lfE * ......................................(… E。 ..X ........... M … J …
5.H.7.5。^ …〜… j ............. ....(。=。h ......... F ..... Q …(...... M
… EX .. {.. .L.2 ......:....... Q ....... v ........... ..... M
................. 0 … S … K … 7。+。B ..... .......&… O …] ...... M
… rB ...... w .. .8.Q …?… A …> ...................)… /。

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

谁能给我一个提示,为什么我听不到声音?

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

这是来自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

但是什么也没发生。我更改了帧大小和帧率,但the啪声只会变快或变慢

编辑3:RtpPacket的实现:http ://pastebin.com/tDLr5CYF


阅读 794

收藏
2020-11-26

共1个答案

小编典典

我的怀疑是打包。

该RFC告诉您应如何完成: RFC 5391

事实证明,这有所帮助,但并非一直如此。如果有人可以帮助并且有效,请接受他的回答,而不是我的回答。

2020-11-26