首页| 论坛| 消息

标题:Qt和ffmpeg结合打造gb28181推流/支持udp和tcp被动以及tcp主动三种方式
作者:liudianwu
日期:2025-10-21 08:33
内容:

## 一、前言说明
上次已经实现了ffmpeg的rtp推流,折腾了好一阵子才搞定,原来是要指定rtp_mpegts方式,但是问题又来了,默认ffmpeg支持的是udp推流,而28181中的要求还要支持tcp被动和tcp主动两种方式,这个要么改ffmpeg底层代码实现,据说不少大佬是采用的这个方式,这种方式好是好,就是对不熟悉ffmpeg底层代码的人来说,太难了,而且一旦换了ffmpeg版本,又要重新写,得不偿失,你看现在ffmpeg8.0又出来了,这不又得改代码才行。综合各种因素考虑了很久,决定采用自己的思路来实现,完全不用修改源码,既然默认是支持的udp推流,那就指定一个127.0.0.1的地址让他推流好了,udp本身无连接的,加上127.0.0.1本身是内部网络地址,不会经过网卡,都是操作系统底层内部交互数据,所以用Qt绑定对应的端口接收数据,再将收到的数据用tcp的方式发出去就好了,收到啥就发出去啥,我真他娘的是个天才,这种绕弯的思路都可以想到。
思路肯定是对的,立马实践验证,发现数据收发是对的,但是28181服务端收到数据解码死活不行,后面查看相关资料才知道,要在对应数据前面加上4字节长度,对应国标文档GB/T 28181文档中提到的引用 IETF RFC4571 ,RFC 4571 的核心规定就是:在通过TCP等流式传输协议发送RTP包时,必须在每个RTP包前面加上一个2字节或4字节的长度字段(Length Prefix)。GB/T 28181通常采用4字节的大端整数格式。按照这个规范要求,在收到udp传过来的每个包前面主动加上4字节长度,验证测试非常完美ok,打完收工加鸡腿。
## 二、效果图


## 三、相关地址
1. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
2. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
3. 个人作品:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)
4. 文件地址:[https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g](https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g) 提取码:01jf 文件名:bin_video_gb28181/bin_video_simulate。
## 四、功能特点
1. 支持设备注册、注销、心跳、校时、注册认证、注销认证等。
2. 设备上线后可以手动获取设备状态、设备信息、配置信息、预置位信息等。
3. 设备上线后自动获取设备通 ..

回复 发表
主题 版块