我想将 .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:[email protected] 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…………数据0……………… ..M................................................. ………………>M……………… ...................................................... ...]M........................................................ ......................|M...................... ..
…………………………………… .M…………
……………………
………………M………… ................................................
…………………………………… ......................
.......+...5...8.........M...6...+.'...-...(.... .#...-...+...
……………………
………………………………………… ................................
...6M............
...................................................... ……嗯……-...1...0...,...)...'...0... ?...=.#.'.$.
。!....................Tm值........................... ..$......................
………………M………………
…………………………M.. .=...I...W...J.../.................#...<...t.. .z...b....m.....>……”……
……
......5.W.L...N......M...C...8.m.'.R...>...O... p...~...e...我...3...…………………………………… ......................................
………………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.........................:..... ..问..v..........
......M......0...SK...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