操作系统 :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. ARC114F Permutation Division

    题意 给定一个 \(1 \sim N\) 的排列,Alice 把它划分成 \(k\) 段,Bob 把这 \(k\) 段任意排列.Alice 想让字典序最小,Bob 想让字典序最大.请问最后的排列. 数 ...

  2. 曾经辛苦造的轮子,现在能否用 ChatGPT 替代呢?

    上一篇文章 我在 vscode 插件里接入了 ChatGPT,解决了代码变量命名的难题 中,展示了如何在 vscode 插件中使用 ChatGPT 解决代码变量命名的问题.vscode 插件市场中有很 ...

  3. ASP.NET Core 6框架揭秘实例演示[40]:基于角色的授权

    ASP.NET应用并没有对如何定义授权策略做硬性规定,所以我们完全根据用户具有的任意特性(如性别.年龄.学历.所在地区.宗教信仰.政治面貌等)来判断其是否具有获取目标资源或者执行目标操作的权限,但是针 ...

  4. iota简介

    当声明枚举类型或定义一组相关常量时,Go语言中的iota关键字可以帮助我们简化代码并自动生成递增的值.本文档将详细介绍iota的用法和行为. iota关键字 iota是Go语言中的一个预定义标识符,它 ...

  5. nacos适配达梦、瀚高、人大金仓数据库及部分源码探究

    一.插件实现 1.插件目录结构 2.pom依赖 <dependency> <groupId>com.alibaba.nacos</groupId> <arti ...

  6. 离线自动化部署CDH

    离线CDH集群自动化部署工具 离线CDH集群安装与部署的自动化脚本工具,简单支持「离线一键装机」. 脚本将对系统配置做出一定修改,使用前请务必确认当前服务器无其他人员.任务使用,以免造成不必要的麻烦, ...

  7. 学习LXC(Linux 容器)技术

    安装LXC.LXD.zfs 测试机器为ubuntu sudo apt-get install lxc lxd zfsutils-linux -y 创建LXD的zfs存储池 sudo lxd init ...

  8. 代码随想录算法训练营第一天| LeetCode 704. 二分查找、LeetCode 27. 移除元素

    704. 二分查找         题目链接:https://leetcode.cn/problems/binary-search/       视频链接:https://www.bilibili.c ...

  9. 【linux】你需要以 root 身份执行此命令

    1.设置root用户的密码: sudo passwd root 2.切换到root用户权限 su 3.切换回个人用户权限 exit

  10. 王道oj/problem10

    地址:http://oj.lgwenda.com/problem/10 思路:首先创建字符串赋初值,其次用gets()输入字符串[fgets()相对于gets()会多识别"\n", ...