近来在移植RTP库过程中出现问题,RTP数据包没有语音数据,数据包格式为unknown rtp version 0,为了检测模块是否正确,dsp能否读出RTP数据,于是使用一些rtp工具来进行实验。结果证实dsp可以读出数据,问题的产生是RTP库的问题。 打开cmd,切换到当前目录,执行rtpplay -f rtp语音文件 目标地址(即接收rtp数据的IP地址)/目标端口
例如:rtpplay.exe -f bark.rtp 192.168.27.103(目标板地址)/8000 此前提必须在目标端打开连接,即执行接收rtp数据的程序,并对地址和端口进行绑定,这样在执行rtpplay时,才可以建立连接,成功发送rtp数据,通过wireshark可以看到相关rtp(udp)数据包。 下面是流程
首先在目标板运行 voip-control -s 192.168.27.100(发送rtp包的目标机) -b
对于上面参数以及其他参数的具体用法 请见 voip-control -h
输入指令 i 发起呼叫,并根据提示如相关数值,如下
Destination (1 = DECT, 2 = FXS):
1
Instance:
1 (随便)
Source:
1
Line (0x200 = next free VoIP line, 0x200 + # of VoIP line (1-4):
200
Handset (0x0 = any handset, bit 1 = 0x1 for handset 1 etc.):
0
Codec:
8(根据你的codec,8表示G.711a,0表示G.711u)
Duration:
20 (10的倍数) 输入完成后 摘机,便建立了通话
接着执行rtpplay.exe -f bark.rtp 192.168.27.103/8000 通过手柄便可听到声音。 下面在集中说一下其他rtp工具的使用。 1. mediastream.exe :mediastream --local
--remote --payload mediastream的作用是从声卡捕捉声音, 编码, 然后通过RTP协议发送到远端, 同时接收远端发送过来的RTP报文, 解码, 通过声卡播放.
比如,
主机A IP 192.168.1.100
主机B IP 192.168.1.200
主机A运行 mediastream.exe --local 2000 --remote 192.168.1.200:3000 --payload 110
主机B运行 mediastream.exe --local 3000 --remote 192.168.1.100:2000 --payload 110
这里payload type 110表示payload_type_speex_nb.
2. rtpdump.exe :rtpdump [-F format] [-t duration] [-x bytes] [-f file] [-o outputfile] address/port rtpdump listens on the address and port pair for RTP and RTCP packets and dumps a processed version to outputfile if specified or stdout otherwise.
rtpdump可以监听地址/端口的RTP报文, 然后输出RTP报文到一个dump文件中. 这一点类似于抓包工具.
3. rtpplay.exe :rtpplay [-T] [-v] [-f file] [-p profile] [-s sourceport] [-b begin] [-e end] destination/port[/ttl] rtpplay reads RTP session data, recorded by rtpdump -F dump from either the file or stdin, if file is not specified, sending it to network address destination and port port with a time-to-live value of ttl.
rtpplay可以读取dump文件中的RTP报文, 然后发送到某地址/端口.
上面三个工具, mediastream支持声音的捕获/播放以及RTP协议, 但不支持RTP报文的保存/读取, 而rtpdump/rtpplay支持RTP报文的保存/读取以及RTP协议, 但不支持声音的捕获/播放.
所以, 结合这三个工具就能完成下面的任务:
1. 把你的声音保存到一个dump文件中;
2. 播放一个dump文件中的声音.
首先保存声音: mediastream.exe --local 2000 --remote 127.0.0.1:3000 --payload 110
rtpdump.exe -F dump -o ./my.rtpdump 127.0.0.1/3000 然后播放声音: mediastream.exe --local 2000 --remote 127.0.0.1:3000 --payload 110
rtpplay.exe -f ./my.rtpdump -s 3000 127.0.0.1/2000