gpt4 book ai didi

FreeSWITCH使用L16编码通信及raw数据提取

转载 作者:我是一只小鸟 更新时间:2023-05-08 06:31:16 41 4
gpt4 key购买 nike

环境:CentOS 7.6_x64 。

FreeSWITCH版本 :1.10.9 。

Python版本:3.9.12 。

1、背景描述

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 。

2、具体实现

1、配置FS及软电话支持L16编码

1)配置FS支持L16编码 。

文件:freeswitch/conf/vars.xml添加L16编码:

                
                  <
                
                
                  X-PRE-PROCESS 
                
                
                  cmd
                
                
                  ="set"
                
                
                   data
                
                
                  ="global_codec_prefs=OPUS,G722,PCMU,PCMA,H264,VP8,iLBC,L16"
                
                
                  />
                
                
                  <
                
                
                  X-PRE-PROCESS 
                
                
                  cmd
                
                
                  ="set"
                
                
                   data
                
                
                  ="outbound_codec_prefs=OPUS,G722,PCMU,PCMA,H264,VP8,iLBC,L16"
                
                
                  />
                
              

2)配置软电话支持L16编码 。

这里使用 MicroSIP 软电话,启用编码:LPCM 8kHz 。

具体配置如下:

  2、L16编码通话及抓包

1)配置测试拨号方案 。

拨打 6001 播放moh音频,具体如下:

                
                  <
                
                
                  extension 
                
                
                  name
                
                
                  ="moh_test"
                
                
                  >
                
                
                  <
                
                
                  condition 
                
                
                  field
                
                
                  ="destination_number"
                
                
                   expression
                
                
                  ="^6001$"
                
                
                  >
                
                
                  <
                
                
                  action 
                
                
                  application
                
                
                  ="answer"
                
                
                  />
                
                
                  <
                
                
                  action 
                
                
                  application
                
                
                  ="playback"
                
                
                   data
                
                
                  ="local_stream://moh"
                
                
                  />
                
                
                  </
                
                
                  condition
                
                
                  >
                
                
                  </
                
                
                  extension
                
                
                  >
                
              

2)使用L16编码进行通话 。

注册分机,拨打 6001 进行通话,在控制台可以看到使用的是 L16 编码:

 3)数据抓包及编码查看 。

在服务器上抓包后使用wireshark进行查看:

3、raw数据提取及播放

wireshark不能播放L16格式的音频数据:

 需要从RTP数据中提取payload数据,然后使用其它工具进行播放.

这里介绍两种使用python提取raw数据的方法,具体如下.

1、使用libpcap从pcap文件提取pcm数据

libpcap版本:1.11.0b7 。

python3如何使用libpcap解析pcap文件,可参考这篇文章:

python3使用libpcap库进行抓包及数据处理 。

这里示例下提取pcm数据的流程.

文件:export_raw_libpcap.py 。

内容如下:

2、使用scapy从pcap文件提取pcm数据

scapy版本:2.5.0 。

scapy地址:https://scapy.net/ 。

scapy文档地址:https://scapy.readthedocs.io/ 。

这里示例下提取pcm数据的流程.

文件:export_raw_scapy.py 。

内容如下:

3、运行效果

运行python脚本,可从pcap文件中提取L16格式的pcm数据,效果如下:

  4、L16格式音频播放

可使用 Audacity 、ffmpeg进行播放,具体参考我之前的文章:

pcm音频的录制、播放及转换 。

需要注意的是wireshark抓包的数据是大端字节序,导出的pcm文件是s16be格式.

这里提供一种Windows 10 环境下使用pyaudio进行播放的方法.

pyaudio 版本 :0.2.13 。

文件:playL16.py 。

内容如下:

 L16编码raw数据提取及播放效果视频:

关注微信公众号(聊聊博文,文末可扫码)后回复 2023050701 获取。  。

4、资源下载

本文涉及源码及二进制文件,可以从如下途径获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20230507 获取。  。

  。

最后此篇关于FreeSWITCH使用L16编码通信及raw数据提取的文章就讲到这里了,如果你想了解更多关于FreeSWITCH使用L16编码通信及raw数据提取的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com