环境:CentOS 7.6_x64
FreeSWITCH版本 :1.10.9
Python版本:3.9.12
PCM(Pulse Code Modulation,脉冲编码调制)音频数据是未经压缩的音频采样数据,它是由模拟信号经过采样、量化、编码转换成的标准数字音频数据。
在FreeSWITCH中体现为L16编码(switch_pcm.c文件),和网络平台进行音频对接时会使用到该编码,这里记录下如何使用FreeSWICH进行L16编码通信,以及如何从pcap文件中获取raw数据。
这里使用的FreeSWITCH版本是1.10.9,操作系统是CentOS 7.6_x64,FreeSWITCH的编译及安装可参考我之前写的文章:CentOS7环境源码安装freeswitch1.10
1)配置FS支持L16编码
文件:freeswitch/conf/vars.xml添加L16编码:
2)配置软电话支持L16编码
这里使用 MicroSIP 软电话,启用编码:LPCM 8kHz
具体配置如下:
1)配置测试拨号方案
拨打 6001 播放moh音频,具体如下:
2)使用L16编码进行通话
注册分机,拨打 6001 进行通话,在控制台可以看到使用的是 L16 编码:
3)数据抓包及编码查看
在服务器上抓包后使用wireshark进行查看:
wireshark不能播放L16格式的音频数据:
需要从RTP数据中提取payload数据,然后使用其它工具进行播放。
这里介绍两种使用python提取raw数据的方法,具体如下。
libpcap版本:1.11.0b7
python3如何使用libpcap解析pcap文件,可参考这篇文章:
这里示例下提取pcm数据的流程。
文件:export_raw_libpcap.py
内容如下:
scapy版本:2.5.0
scapy地址:https://scapy.net/
scapy文档地址:https://scapy.readthedocs.io/
这里示例下提取pcm数据的流程。
文件:export_raw_scapy.py
内容如下:
运行python脚本,可从pcap文件中提取L16格式的pcm数据,效果如下:
可使用 Audacity 、ffmpeg进行播放,具体参考我之前的文章:
需要注意的是wireshark抓包的数据是大端字节序,导出的pcm文件是s16be格式。
这里提供一种Windows 10 环境下使用pyaudio进行播放的方法。
pyaudio 版本 :0.2.13
文件:playL16.py
内容如下:
L16编码raw数据提取及播放效果视频:
关注微信公众号(聊聊博文,文末可扫码)后回复 2023050701 获取。
本文涉及源码及二进制文件,可以从如下途径获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 20230507 获取。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章