环境: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编码

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进行查看:

三、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 获取。

四、资源下载

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

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

FreeSWITCH使用L16编码通信及raw数据提取的更多相关文章

  1. 导入excel并进行数据提取

    /** * @description: 导入excel并进行数据提取 * @param {type} * @return: */ Vue.prototype.$importExcel = functi ...

  2. 【转载】使用Pandas进行数据提取

    使用Pandas进行数据提取 本文转载自:蓝鲸的网站分析笔记 原文链接:使用python进行数据提取 目录 set_index() ix 按行提取信息 按列提取信息 按行与列提取信息 提取特定日期的信 ...

  3. PDO 学习与使用 ( 二 ) PDO 数据提取 和 预处理语句

    以数据库 msg 为例,说明 PDO 的数据提取.预处理语句: mysql> show tables;+---------------+| Tables_in_msg |+----------- ...

  4. 什么是RAW数据?

    现在数码照片的存储格式,以及在网络上应用的最普遍的图片格式就是JPEG格式了(Joint Photographic Expert Group).但是作为一种有损的图像压缩格式(现在也有少数数码相机提供 ...

  5. 转:SQL SERVER数据库中实现快速的数据提取和数据分页

    探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...

  6. PHP实例 表单数据插入数据库及数据提取 用户注册验证

    网站在进行新用户注册时,都会将用户的注册信息存入数据库中,需要的时候再进行提取.今天写了一个简单的实例. 主要完成以下几点功能: (1)用户进行注册,实现密码重复确认,验证码校对功能. (2)注册成功 ...

  7. pl/sql programming 15 数据提取

    数据提取 -- 游标 游标只是一个指向某个结果集的指针. 声明游标: cursor employee_cur IS select * from employees; 打开游标: open employ ...

  8. SQL 正则表达式使模式匹配和数据提取变得更容易

    SQL Server 2005 正则表达式使模式匹配和数据提取变得更容易 David Banister 本文讨论: 使用正则表达式进行高效的 SQL 查询 SQL Server 2005 对正则表达式 ...

  9. PHP+Mysql-表单数据插入数据库及数据提取完整过程

    网站在进行新用户注册时,都会将用户的注册信息存入数据库中,需要的时候再进行提取.今天写了一个简单的实例. 主要完成以下几点功能: (1)用户进行注册,实现密码重复确认,验证码校对功能. (2)注册成功 ...

  10. 海量日志数据提取某日访问百度次数最多的那个IP的Java实现

    海量日志数据提取某日访问百度次数最多的那个IP的Java实现 前几天在网上看到july的一篇文章<教你如何迅速秒杀掉:99%的海量数据处理面试题>,里面说到百度的一个面试题目,题目如下: ...

随机推荐

  1. 自行封装JDBCUtils

    自己封装JDBCUtils package com.javasm.util; import com.javasm.bean.Emp; import com.javasm.constants.JDBCC ...

  2. 转帖:巧用Stream优化老代码,太清爽了!

    Java8的新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读 放大招,流如何简化代码 如果有一个需求,需要对数据库 ...

  3. Mybatis-plus常见报错

    1.提示数据库(表)不存在,如图: 原因:mybatis-plus默认查询的表名字为实体类的名字User,并转小写. 解决:添加注解@TableName设置表名

  4. git Permission denied, please try again.

    博主在github上下载tiny face的的源代码的时候,遇到git clone命令为:git clone --recursive git@github.com:peiyunh/tiny.git 而 ...

  5. elementui中对样式的修改标签

    /deep/ .el-drawer.rtl { -webkit-animation: rtl-drawer-out .3s; animation: rtl-drawer-out .3s; backgr ...

  6. Spring Cloud Alibaba实现服务的无损下线功能

    目录 1.背景 2.解决方案 2.1 找到通过负载均衡组件获取可用服务信息的地方 2.2 解决思路 3.部分实现代码 3.1 引入jar 3.2 编写服务下线方法 3.3 监听配置变更,清除服务缓存 ...

  7. 对使用网站模板编写自己的jsp页面的收获

    收获与问题 先感叹一句模板的强大,模板只要按照我的上一篇博客的步骤进行修改,我们就能拥有一个自己写好看许多的界面了. 我目前套用模板还不是很熟练,套用的速度还需要加快,不过目前的我,已经掌握了基本要领 ...

  8. Codeforces Round #648 (Div. 2) A~F题解

    开始补cf了,还是记录一下,加深思路,打的应该都是div2.题面不截图了,直接说题意,思路,代码. A 题意:给一个01矩阵,两个人轮流填格子,仅当第i行,第j列全为0时才能填,不能填的人输,问谁赢? ...

  9. 从零开始,开启属于你的 RTE 漫游之旅!丨漫游指南 x 即将启航

    什么是「开发者漫游指南」? 「开发者漫游指南」邀请热爱前端开发.关心音视频领域发展.希望进入音视频行业.乐于和大家一起交流成长的小伙伴,通过「开发者漫游指南」与社区共同成长,帮助更多的开发者在实时音视 ...

  10. 跳出思维的“盒子”,聊聊 RTE 应用创新大赛的那些作品

    由声网Agora 与环信联合主办的"RTE 2021 编程挑战赛"已圆满落幕.在今年的大赛中,来自行业中不同领域的专家参与了决赛评选,包括 Linux 中国技术社区技术负责人 白宦 ...