操作系統 : debian 11 (bullseye,docker)、Windows10_x64 FreeSWITCH版本 :1.10.9 Docker版本:23.0.6 Python 版本 : 3.9.2 日常工作中,有時候會遇到g729編碼的相關內容,但FreeSWITCH預設是不支持g729編 ...
操作系統 : 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 獲取。
微信公眾號: