使用wireshark解析RTP包中的音频流
当使用RTP协议传输音频,但是具体的载荷类型payload type是自定义的payload时可以使用以下方法进行解析;
使用wireshark对RTP报文进行解析
拿到抓包文件后使用wireshark打开
并使用合适的过滤条件进行过滤
然后选中其中一个数据包,右键选择[解码为…(Decode As…)]
选择RTP并点击OK
此时wireshark界面可以看到已经将对应的报文作为RTP协议解析;
然后选择【电话】-【RTP】-【RTP流】即[Telephony] – [RTP] – [RTP Streams];
然后选中需要分析的流并点击【分析】(Analyze)
由于payload使用自定义的格式(比如本例为PCM 16bit 小端 单通道 8000采样的原始格式);因此直接点击【Play Streams】播放会是噪音,需要将原始payload保存为单个文件后再做处理;
需要我们保存成raw格式文件,点击【Save】,选择File Synchronized Forwar Stream Audio;即文件同步正向音频流;
注意在save对话页面,
选择 raw,注意一定要选raw格式,否则保存不了正常的payload影响后面的解析;
然后再save;
使用Audacity进行音频文件编辑与转换
打开audacity
导入刚刚保存的audio文件
【File】-- 【Import】 -- 【Raw Data…】选择刚保存的文件
然后再弹窗中设置编码方式
然后点击【Import】
可以单击播放按钮来进行试听
也可以导出音频文件,在播放器中播放;
这里选在导出为wav文件;
【File】-- 【Export】 -- 【Export As Wav…】
确认名字和保存路径无误后点击【Save】即可;
然后编辑MetaData页面可以直接ok即可,也可以自行编辑;
使用FFmpeg进行格式转换
也可以使用FFmpeg命令进行转换,前提是系统需要提前安装FFmpeg工具,网上有些方法比较复杂而且不一定能成功,这里推荐一个便捷方式,即安装smplayer,会顺带把FFmpeg作为依赖而自动安装上去,只需执行 sudo apt install smplayer命令即可;
FFmpeg转换命令
# ffmpeg -ar 8000 -ac 1 -acodec pcm_s16le -f s16le -i Saved-RTP-Audio.au Rtp-ffmpeg-formatted.wav
选择音乐播放器播放刚保存的wav文件,比如rhythmbox;可以听到正常的声音;