一、啓用h264相關模塊
這裏以 mod_openh264 爲例進行演示。
1、安裝open_h264庫
獲取 open_h264 源碼:
git clone https://github.com/cisco/openh264.git
若下載過慢,可從如下渠道獲取:
關注微信公衆號(聊聊博文,文末可掃碼)後回覆 20231006 獲取。
安裝編譯工具:
yum install nasm
編譯及安裝:
make ENABLE64BIT=Yes make install
2、安裝mod_openh264模塊
codecs/mod_openh264目錄已存在,啓用該模塊即可。
文件: freeswitch-1.10.9.-release/modules.conf
1)註釋掉 codecs/mod_h26x 選項;
2)添加 codecs/mod_openh264 選項;
echo "codecs/mod_openh264" >> modules.conf
3)編譯及安裝
./rebootstrap.sh CFLAGS="-O3 -fPIC" ./configure make -j make install
查看模塊是否安裝成功:
ls /usr/local/freeswitch/mod/mod_openh264.* -lh
3、啓用mod_openh264模塊
文件:conf/autoload_configs/modules.conf.xml
不啓用 mod_h26x 、mod_av 模塊,啓用 mod_openh264 模塊;
show codecs 可以看到已啓用h264編碼。
二、開啓視頻呼叫
1、配置編碼
1 ) 添加編解碼支持
文件: conf/vars.xml
修改內容:
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=OPUS,G722,PCMU,PCMA,H264,VP8,G729"/> <X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=OPUS,G722,PCMU,PCMA,H264,VP8,G729"/>
2 ) 配置profile
文件:
sip_profiles/internal.xml
sip_profiles/external.xml
修改或添加內容:
<param name="inbound-proxy-media" value="false"/> <param name="inbound-late-negotiation" value="false"/> <param name="disable-transcoding" value="false"/>
此外,proxy-media 不能開啓,否則會轉碼失敗。
2、測試視頻呼叫
普通呼叫:
originate user/1000 &echo
會議室呼叫:
originate user/1000 &conference(test@default)
選擇視頻應答即可:
演示視頻可從如下渠道獲取:
關注微信公衆號(聊聊博文,文末可掃碼)後回覆 2023100601 獲取。
3、轉碼測試
這裏以sipp作爲h264視頻終端,軟電話作爲vp8視頻終端進行轉碼測試。
1)sipp配置
這裏先播放音頻再播放視頻。
<!-- Play a pre-recorded PCAP file (RTP stream) --> <nop> <action> <exec play_pcap_audio="g711a.pcap"/> </action> </nop> <pause milliseconds="10000"/> <nop> <action> <exec play_pcap_video="h264.pcap"/> </action> </nop>
INVITE請求如下:
完整配置可從文章末尾提供的渠道獲取(audioVideoTest1.tar.gz)。
2)軟電話配置
配置軟電話只支持vp8視頻編碼。
3)編寫撥號方案:
文件: dialplan/public.xml
添加內容:
<extension name="test1112"> <condition field="destination_number" expression="^(7654321)$"> <action application="bridge" data="user/1000"/> </condition> </extension>
4)轉碼測試
重啓freeswitch,然後用sipp進行呼叫測試。
演示視頻可從如下渠道獲取:
關注微信公衆號(聊聊博文,文末可掃碼)後回覆 2023100602 獲取。
三、從pcap中提取h264視頻文件
1、使用wireshark提取h264視頻
wireshark版本: 3.6.12
需要安裝lua插件。
1)獲取lua插件:
github地址: https://github.com/volvet/h264extractor
將 rtp_h264_extractor.lua 複製到wireshark安裝目錄。
若下載過慢,可從如下渠道獲取:
關注微信公衆號(聊聊博文,文末可掃碼)後回覆 20231006 獲取。
2)添加lua插件
文件:init.lua
在文件末尾添加如下內容:
dofile(DATA_DIR.."rtp_h264_extractor.lua")
3)啓動wireshark進行視頻提取
工具 -> Extract h264 stream from RTP
提取窗口會顯示視頻文件路徑:
播放視頻:
ffplay C:\Users\Mike\Documents\video_20231006-102002.264
2、使用python腳本提取h264視頻
需要注意,這裏除了解析rtp頭,還需要解析h264頭。
python解析rtp可參考這篇文章:
https://www.cnblogs.com/MikeZhang/p/pythonUseLibpcap20221029.html
解析h264頭請查閱相關rfc文檔:
https://www.rfc-editor.org/rfc/rfc3984
示例代碼如下:
完整代碼可從文末提供的渠道獲取。
wireshark和python提取h264的運行效果視頻可從如下渠道獲取:
關注微信公衆號(聊聊博文,文末可掃碼)後回覆 2023100603 獲取。
四、資源下載
本文涉及資源及示例代碼可從如下渠道獲取:
關注微信公衆號(聊聊博文,文末可掃碼)後回覆 20231006 獲取。