FreeSWITCH添加h264编码及pcap视频提取
一、启用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视频提取的更多相关文章
- FreeSWITCH添加iLBC编码及转码
操作系统 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 一.安装ilbc库 从第三方库里下载指定版本: git clone https://freeswitch.org/s ...
- 音视频处理之H264编码标准20170906
一. H264基础概念 1.名词解释 场和帧 : 视频的一场或一帧可用来产生一个编码图像.在电视中,为减少大面积闪烁现象,把一帧分成两个隔行的场. 片: 每个图象中,若干 ...
- iOS音频AAC视频H264编码 推流最佳方案
iOS音频AAC视频H264编码 推流最佳方案 项目都是个人的调研与实验,可能很多不好或者不对的地方请多包涵. 1 功能概况 * 实现音视频的数据的采集 * 实现音视频数据的编码,视频编码成 ...
- 采集音频和摄像头视频并实时H264编码及AAC编码[转]
0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...
- 采集音频和摄像头视频并实时H264编码及AAC编码
转自:http://www.cnblogs.com/haibindev/archive/2011/11/10/2244442.html 0. 前言 我在前两篇文章中写了DirectShow捕获音视频然 ...
- H264编码 封装成MP4格式 视频流 RTP封包
H264编码 封装成MP4格式 视频流 RTP封包 分类: 多媒体编程 2013-02-20 21:31 3067人阅读 ...
- H264编码原理以及I帧、B和P帧详解, H264码流结构分析
H264码流结构分析 http://blog.csdn.net/chenchong_219/article/details/37990541 1.码流总体结构: h264的功能分为两层,视频编码层(V ...
- C++实现RTMP协议发送H.264编码及AAC编码的音视频
http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RTMP ...
- C++实现RTMP协议发送H.264编码及AAC编码的音视频(转)
C++实现RTMP协议发送H.264编码及AAC编码的音视频(转) RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia ...
- 【转】C++实现RTMP协议发送H.264编码及AAC编码的音视频
RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系F ...
随机推荐
- 对象存储?CRUD Boy实现对文件的增删改查
大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 以下是正文! 对象存储是什么? 对象存储是一种数据 ...
- ElasticSearch的使用和介绍
1.概述 功能 Elasticsearch 是一个分布式的 RESTful 搜索和分析引擎,可用来集中存储您的数据,以便您对形形色色.规模不一的数据进行搜索.索引和分析. 例如: 在电商网站搜索商品 ...
- docker 对容器中的文件进行编辑
用途 有一些情况下,例如docker安装的redis.nacos.mysql等等,在docker容器中的安装未进行文件的映射,当需要对其进行更改配置信息时,就会遇到这种情况,需要去容器中进行编辑配置文 ...
- .NET Core 允许跨域的两种方式实现(IIS 配置、C# 代码实现)
〇.前言 当把开发好的 WebApi 接口,部署到 Windows 服务器 IIS 后,postman 可以直接访问到接口并正确返回,这并不意味着任务完成,毕竟接口嘛是要有交互的,最常见的问题莫过于跨 ...
- 【WALT】WALT入口 update_task_ravg() 代码详解
目录 [WALT]WALT入口 update_task_ravg() 代码详解 代码展示 代码逻辑 ⑴ 判断是否进入 WALT 算法 ⑵ 获取 WALT 算法中上一个窗口的开始时间 ⑶ 如果任务刚初始 ...
- Mysql基础篇(二)之函数和约束
一. 函数 Mysql中的函数主要分为四类:字符串函数.数值函数.日期函数.流程函数 1. 字符串函数 常用函数如下: 函数 功能 CONCAT(S1, S2, ......Sn) 字符串拼接,将S1 ...
- 2023-07-04:给定一个数组A, 把它分成两个数组B和C 对于数组A每个i位置的数来说, A[i] = B[i] + C[i] 也就是一个数字分成两份,然后各自进入B和C 要求B[i], C[i
2023-07-04:给定一个数组A, 把它分成两个数组B和C 对于数组A每个i位置的数来说, A[i] = B[i] + C[i] 也就是一个数字分成两份,然后各自进入B和C 要求B[i], C[i ...
- JAVA代码下载TXT文件(本地和服务器上的代码都可以)
// 读取服务器文件内容(TXT文件测试可以) public static List<String> showTxt(String filePath) throws IOException ...
- matlab的gui图像处理操作界面,实现重置和退出按钮功能
axes控件实现了展示图片,动态txt控件实现了展示或者输入参数. 重置 在gui界面右键点击重置pushbotton回到代码块callback,编写代码 以下代码是实现图片和参数数字重置,是重置按钮 ...
- BUUCTF-MISC-面具下的flag(vmdk的解压和Brainfuck与Ook解密)
准备工作 下载附件得到一个一张图片 丢入winhex,发现还有一个flag.vmdk文件 vmdk文件其实是虚拟机使用的硬盘文件 打开kali binwalk -e mianju.jpg 关键步骤 这 ...