首页 > 其他分享 >FreeSWITCH添加g729编码及pcap音频提取

FreeSWITCH添加g729编码及pcap音频提取

时间:2023-07-22 23:12:09浏览次数:38  
标签:g729 bcg729 提取 音频 获取 FreeSWITCH docker pcap

操作系统 : debian 11 (bullseye,docker)、Windows10_x64 FreeSWITCH版本 :1.10.9 Docker版本:23.0.6 Python 版本  :  3.9.2   日常工作中,有时候会遇到g729编码的相关内容,但FreeSWITCH默认是不支持g729编码转码的,今天记录下使用开源的 bcg729 进行g729转码的过程(本文仅作技术研究,商业使用请购买商业版本),以及如何从g729格式的pcap数据中提取音频文件。 本文基于docker打包的debian 11环境,构建base包的过程可以参考我之前的文章: https://www.cnblogs.com/MikeZhang/p/dockerPackFs20230617.html 

一、添加g729编码及开启转码

1、获取bcg729源码

GitHub地址:https://github.com/xadhoom/mod_bcg729

 下载命令:

wget https://github.com/xadhoom/mod_bcg729/archive/refs/tags/v1.0.5.tar.gz

2、编译及安装bcg729编码

1)启动编译环境:

docker run --name fs --network host -t -d fs:base /bin/bash

 说明:该环境已经安装freeswitch 1.10.9,具体编译过程可参考我在文章开头给出的参考信息。

2)复制及解压文件

docker cp bcg729_v1.0.5.tar.gz fs:/usr/src
docker exec -it fs bash
cd /usr/src/
tar zxf bcg729_v1.0.5.tar.gz

3)编译及安装

编译过程会从这里下代码:

git clone https://github.com/BelledonneCommunications/bcg729.git

需要安装git

apt install git

编译及安装:

make && make install

也可在宿主机系统下载后复制到docker容器,如果下载过慢,可直接使用我下载及编译好的文件:

 编译及安装过程:

docker cp mod_bcg729_all fs:/root/
docker exec -it fs bash
cd /root/mod_bcg729_all/
make && make install
可从如下渠道获取: 关注微信公众号(聊聊博文,文末可扫码)后回复 20230722 获取。

3、加载bcg729编码

文件:conf/autoload_configs/modules.conf.xml

修改内容:

<!--load module="mod_g729"/-->
<load module="mod_bcg729"/>

控制台查看编码:

show codec

4、开启bcg729转码

文件:conf/vars.xml
修改或添加内容:

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

文件:

sip_profiles/internal.xml
sip_profiles/external.xml

修改或添加内容:

<param name="inbound-late-negotiation" value="false"/>
<param name="disable-transcoding" value="false"/>

5、其它

如果测试过程中遇到30秒挂机的情况,设置下rtp地址为内网:

<X-PRE-PROCESS cmd="set" data="external_rtp_ip=192.168.137.33"/>
<X-PRE-PROCESS cmd="set" data="external_sip_ip=192.168.137.33"/>

二、从pcap提取音频文件

 提取过程和提取pcma格式音频类似,相关工具可从这篇文章提供的渠道获取:

https://www.cnblogs.com/MikeZhang/p/20230326-pcapToWav.html

这里简单描述下区别。

1、Windows 10环境使用wireshark提取rtp音频

https://wiki.wireshark.org/HowToDecodeG729

使用wireshak 2.6.0以后的版本支持解析g729格式。

 解析效果如下:

 导出wav文件:

 在弹出的界面输入文件路径即可。

2、Windows 10环境使用python提取rtp音频

使用python导出rtp音频大概分为以下两个步骤:

1)使用libpcap从pcap文件中提取raw格式的音频;

libpcap的使用可以参考这篇文章:

https://www.cnblogs.com/MikeZhang/p/pythonUseLibpcap20221029.html

2)使用ffmpeg将raw格式转换成需要的格式(比如mp3)

可从ffmpeg官方网站下载,也可从文末提供的资源地址获取。

python示例代码:

完整示例代码可以从如下途径获取:

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

三、运行效果

 1、bcg729转码运行效果

1000分机:仅支持g729编码
1001分机:仅支持PCMA编码

 转码效果:

 g729转码运行效果视频可以从如下途径获取:

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

2、pcap音频提取效果

wireshark提取效果:

 python提取效果:

 g729音频提取运行效果视频可以从如下途径获取:

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

四、资源下载

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

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

 

标签:g729,bcg729,提取,音频,获取,FreeSWITCH,docker,pcap
From: https://www.cnblogs.com/MikeZhang/p/fsG729Relate20230722.html

相关文章

  • python sip freeswitch
    PythonSIPandFreeSWITCHIntroductionInthisarticle,wewillexplorehowtousePythontointeractwithFreeSWITCH,anopen-sourcetelephonyplatform.WewillspecificallyfocusonutilizingtheSessionInitiationProtocol(SIP)moduleinPythontoest......
  • WinPcap编程常用库函数
    PCAP常用库函数pcap_t*pcap_open_live(char*device,intsnaplen,intpromisc,intto_ms,char*ebuf)获得用于捕获网络数据包的数据包捕获描述字。device参数为指定打开的网络设备名。snaplen参数定义捕获数据的最大字节数。promisc指定是否将网络接口置于混杂模式......
  • 在freeSwitch中,实现来电对接百度语音翻译
    要在FreeSWITCH中实现来电对接百度语音翻译,可以使用FreeSWITCH提供的mod_vbr(VoiceBiometricRecognition)模块结合开发者可以使用的百度API接口来实现。下面是基本的实现步骤:安装mod_vbr模块首先需要在FreeSWITCH中安装mod_vbr模块。可以通过以下命令进行安装:sudoapt-geti......
  • 在freeSwitch中,使用拨号计划实现来自gateway 为gw80 的来电转向 gateway 为gw4的,并且
    可以通过如下拨号计划实现该功能:```<include><contextname="default"><extensionname="forward_call"><conditionfield="destination_number"expression="^53(\d+)$"><actionapplication=&q......
  • Freeswitch新增网关
    本文介绍认证模式网关配置配置demo如下,文件存放路径/freeswitch/conf/sip_profiles/external/gw01.xml:1<include>2<gatewayname="gw01">3<paramname="username"value="10000"/>4<paramname="realm"value=&......
  • 要在FreeSWITCH 对接钉钉
    要在FreeSWITCH中使用IP限制并保存录音,并将通话转接到callgw.dingtalk.com:6789,并在请求头中添加X-access-number=被叫号码和X-access-token=XXXXX,同时生成录音文件和话单,将话单记录到MySQL数据库中,您可以按以下步骤操作:配置IP限制首先,您需要编辑FreeSWITCH的配置文件(如sip_pr......
  • 在FreeSWITCH中使用Lua脚本来将电话记录存储到MySQL数据库中
    在FreeSWITCH中使用Lua脚本来将电话记录存储到MySQL数据库中,需要做以下几个步骤:安装MySQL客户端库首先需要通过包管理器(如apt-get或yum)安装MySQL客户端库,以便FreeSWITCH能够与MySQL数据库进行通信。例如,在Ubuntu系统中,可以运行以下命令进行安装:sudoapt-getinstalllibmysq......
  • freeswitch透传带SDP的180
     概述freeswitch是一款简单好用的VOIP开源软交换平台。freeswitch对于180/183的消息处理有默认的规则,但是在3GPP的标准中,消息流程会更加复杂,场景更多变。这样就需要我们根据实际环境中的场景定制消息流程。本文只讨论带SDP的183/180消息。环境centos:CentOS release7.0......
  • FreeSwitch基础知识(一)
        总的来说,FreeSwitch由一个稳定的核心(Core)及一些外围模块组成、这些外围模块根据其功能和用途的不同又分为Endpoint、Codec、Application等不同的类别。    FreeSwitch内部使用线程模型来处理并发请求,每个连接都在单独的线程中进行处理,不同的线程间通过Mutex互......
  • windows编译freeswitch-1.8.5
    我的windows环境是WIN10编译器是vs2022下载好freeswitch-1.8.5代码解压后直接打开sln文件,开始编译。报错如下:6>libsrtp.lib(crypto_kernel.obj):errorLNK2005:SocketNotificationRetrieveEvents已经在libsrtp.lib(srtp.obj)中定义6>libsrtp.lib(alloc.obj):errorL......