一、背景描述:
近日,项目现场传来消息,终端音频解码声音不正常,有爆破音。
我们的项目的视音频使用RTP协议封装,视频使用H.264格式,音频使用G.711格式,使用UDP发送接收。
音频流传输是这样的:
终端A -> 流媒体服务器 -> 终端B
在现场的同事,在流媒体服务器上面进行了抓包,流媒体服务器收到的音频流、发出去的音频流,解出来的声音都没有问题。
二、如何从RTP包中提取音频数据
1、拿到.pcap文件后,使用wireshark打开
2、解码为RTP:此时还是现实UDP包,点击任意一个UDP包,鼠标右键,Decode As,窗口右侧列表总选择RTP
3、查看流信息:菜单 Telephony->rtp->stream analysis
4、保存.AU文件:在弹出窗口中,可以看到这个流的统计信息,包括丢包、乱序等,点击左下角按钮save payload as,选择.au
5、收听.AU文件:可以使用VLC直接打开,也可以使用audacity打开并且查看波形
三、分析PCM数据
既然服务器发出去的流没有问题,那么只能从终端上面找原因了。
终端设备是嵌入式设备,使用嵌入式linux系统,音频采集、播放使用ALSA接口,编解码使用软件模块。
由于设备不在身边,不能操作串口,所以我先选择了修改代码,在ALSA播放线程