FreeSWITCH添加h264編碼及pcap視頻提取

操作系統 :CentOS 7.6_x64、Windows 10_x64
FreeSWITCH版本 :1.10.9
Python版本:3.9.2

一、啓用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 獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章