我想将 .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:<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6150515153215058534f5057594f534f505051" rel="noreferrer noopener nofollow">[email protected]</a> 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 流,开头看起来像这样:
........M...RIFF....WAVEfmt ........D...........data0...............................M..........................................................................>M..........................................................................]M..........................................................................|M..................... ....................... ..... .......................M........... ......................... .....................................M........................................................... ...............M............................................... .......+...5...8...........M...6...+.'...-...(.....#...-...+... ........................... ...........M...................................................................... ...6M......... ... ............................................................UM...........-...1...0...,...)...'...0...?...=.#.'.$. .!....................tM.............................$....................... .....&.......... ....M........................... ...................................,...........M...=...I...W...J.../.....................#...<...T...Z...B.................M.....#...5...5......................"... ..... .......5.W.L...N...........M...C...8.m.'.R...>...O...p...~...e...I...3................................M................................................... .......................M... ...5...R...L...3.../...B...Z...b...
...X...B...!.........{............MM.........$...2...(........................................................lM...............................-.!.R.J.].s.Z.t.U.c.b.
.q.v.....y...........M...h...V...Y...c...l.f.E.*.............................(...E...X...........M...J...5.H.7.5.^...~...j.................(.=.h.........F.....Q...(.........M.....E.X...{...L.2...............:.......Q.......v........... .............M.................0...S...K...7.+.B.....................&...O...]...........M...r.B.......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
但是什么也没发生。我更改了帧大小和帧速率,但噼啪声只会变得更快或更慢
编辑3: RtpPacket的实现: http://pastebin.com/tDLr5CYF
最佳答案
关于java - Android:通过 RTP (G.711 PCMU) 将 .wav 发送到 SIP 电话,基于 SipDroid/MjSIP,声音非常嘈杂、噼啪作响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18257438/