标题:Qt结合ffmpeg代码实现udp推流/组播推流/rtp推流/监控GB28181推流/onvif推流
作者:liudianwu
日期:2025-09-28 08:57
内容:
## 一、前言说明
之前已经用ffmpeg代码实现了rtsp和rtmp推流,在没有搞过推流的时候,以为很难,其实推流就是保存文件到一个rtsp/rtmp地址,完全复用保存到MP4文件的代码,唯一不同的时候就是在avformat_alloc_output_context2函数第三个参数,保存到MP4文件填的是mp4,而rtsp推流填的是rtsp,rtmp推流填的是flv,同理后面增加的udp推流填的mpegts,28181推流填的rtp_mpegts,其实rtp默认推流用的是mpegts,而28181的标准要求是在mpegts还要加上rtp头,所以需要填rtp_mpegts,否则推流的数据在gb28181平台软件上无法正常解析。
udp推流默认是mpegts格式,有些用户希望是h264/h265的裸流数据,那只需要这里改成h264即可,这样就是直接裸流数据,而不是ts格式的封装,怎么样是不是很方便,底层全部ffmpeg给自动处理,自己如果按照规范文档写对应组包数据,会非常繁琐,而且兼容性也未必有ffmpeg好,自此这个封装的ffmpeg的视频组件越来越强大了。
## 二、效果图
## 三、功能特点
1. 支持各种本地音视频文件和网络音视频文件,格式包括mp3、aac、wav、wma、mp4、mkv、rmvb、wmv、mpg、flv、asf等。
2. 支持各种网络音视频流,网络摄像头,协议包括rtsp、rtmp、http等。
3. 支持本地摄像头设备推流,可指定分辨率、帧率、格式等。
4. 支持本地桌面采集推流,可指定屏幕索引、采集区域、起始坐标、帧率等,也支持指定窗口标题进行采集。
5. 可实时切换预览视频文件,可切换音视频文件播放进度,切换到哪里就推流到哪里。预览过程中可以切换静音状态和暂停推流。
6. 可指定重新编码推流,任意源头格式可选强转264或265格式。
7. 可转换分辨率推流,设置等比例缩放或者指定分辨率进行转换。
8. 推流的清晰度、质量、码率都可调,可以节约网络带宽和拉流端的压力。
9. 音视频文件自动循环不间断推流。
10. 音视频流有自动掉线重连机制,重连成功自动继续推流。
11. 支持各种流媒体服务程序,包括但不限于mediamtx、ZLMediaKit、srs、LiveQing、nginx-rtmp、EasyDarwin、ABLMediaServer。
12. 通过配置文件自动加载对应流媒体程序的协议和端口,自动生成推流地址和各种协议的拉流地址。可以通过配置文件自己增加流媒体程序。
13. 可选rtmp、rtmp格式推流,推流成功后,支持多种格式拉流,包括但不限于rtsp、rtmp、hls、flv、ws-flv、webrtc等。
14. 在软件上推流成功后,可以直接单击网页预览,实时预览推流后拉流 ..