操作系统 :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 获取。

FreeSWITCH添加h264编码及pcap视频提取的更多相关文章

  1. FreeSWITCH添加iLBC编码及转码

    操作系统 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 一.安装ilbc库 从第三方库里下载指定版本: git clone https://freeswitch.org/s ...

  2. 音视频处理之H264编码标准20170906

    一. H264基础概念 1.名词解释 场和帧 :    视频的一场或一帧可用来产生一个编码图像.在电视中,为减少大面积闪烁现象,把一帧分成两个隔行的场. 片:             每个图象中,若干 ...

  3. iOS音频AAC视频H264编码 推流最佳方案

    iOS音频AAC视频H264编码 推流最佳方案 项目都是个人的调研与实验,可能很多不好或者不对的地方请多包涵. 1    功能概况 *  实现音视频的数据的采集 *  实现音视频数据的编码,视频编码成 ...

  4. 采集音频和摄像头视频并实时H264编码及AAC编码[转]

    0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...

  5. 采集音频和摄像头视频并实时H264编码及AAC编码

    转自:http://www.cnblogs.com/haibindev/archive/2011/11/10/2244442.html 0. 前言 我在前两篇文章中写了DirectShow捕获音视频然 ...

  6. H264编码 封装成MP4格式 视频流 RTP封包

    H264编码 封装成MP4格式 视频流 RTP封包         分类:             多媒体编程              2013-02-20 21:31     3067人阅读    ...

  7. H264编码原理以及I帧、B和P帧详解, H264码流结构分析

    H264码流结构分析 http://blog.csdn.net/chenchong_219/article/details/37990541 1.码流总体结构: h264的功能分为两层,视频编码层(V ...

  8. C++实现RTMP协议发送H.264编码及AAC编码的音视频

    http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RTMP ...

  9. C++实现RTMP协议发送H.264编码及AAC编码的音视频(转)

    C++实现RTMP协议发送H.264编码及AAC编码的音视频(转) RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia ...

  10. 【转】C++实现RTMP协议发送H.264编码及AAC编码的音视频

    RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系F ...

随机推荐

  1. Linux系统运维之Zookeeper集群配置

    一.简介 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.ZooKeeper的目标就是封装好复杂易 ...

  2. Java反射源码学习之旅

    1 背景 前段时间组内针对"拷贝实例属性是应该用BeanUtils.copyProperties()还是MapStruct"这个问题进行了一次激烈的battle.支持MapStru ...

  3. 一文读懂什么是AIGC?

    目录 AIGC概念 AIGC发展历史 在早期萌芽阶段(1950s~1990s) 在沉淀累积阶段(1990s~2010s) 在快速发展阶段(2010s~至今) ChatGPT AIGC能做什么? 电子商 ...

  4. 细节决定成败,聊聊JS的类型(上)

    今天我们来讲讲 JavaScript 的内容,在这个部分,我首先想跟你聊一聊类型. JavaScript 类型对每个前端程序员来说,几乎都是最为熟悉的概念了.但是你真的很了解它们吗?我们不妨来看看下面 ...

  5. 据说,Transformer 不能有效地进行时间序列预测?

    简介 几个月前,我们介绍了 Informer 这个模型,相关论文 (Zhou, Haoyi, et al., 2021) 是一篇获得了 AAAI 2021 最佳论文奖的时间序列论文.我们也展示了一个使 ...

  6. 我和ChatGPT聊数字人

    ​ 近期,聊天机器人ChatGPT火了,写诗写文写代码,才艺狠狠拉满. 面对如此"会聊"的ChatGPT,很多人好奇相同的问题提问ChatGPT和真人,会有什么样的结果? 于是我们 ...

  7. Lock同步_小记

    使用同步机制的这种方式解决线程安全问题,但是不知道具体的锁对象在哪里添加,并且锁对象在哪里释放锁对象,对于这种情况Jdk5以后Java提供了一个更具体的锁对象:Lock Lock 实现提供了比使用 s ...

  8. matlab的gui图像处理操作界面,实现重置和退出按钮功能

    axes控件实现了展示图片,动态txt控件实现了展示或者输入参数. 重置 在gui界面右键点击重置pushbotton回到代码块callback,编写代码 以下代码是实现图片和参数数字重置,是重置按钮 ...

  9. SketchUp Pro 2023 下载和安装教程

    SketchUp Pro 2023 下载和安装教程 下载链接 123云盘:https://www.123pan.com/s/JyAKVv-NTXB.html 安装教程 演示操作系统:Windows 1 ...

  10. VS Code 有哪些好用的插件呢?【持续更新】

    一.画图工具:vscode-drawio   功能:在 VSCode 中画流程图.数据流图等等.        使用方法:     创建一个后缀名为 .drawio 的文件,然后用 VSCode 打开 ...