Qt C++编写推流综合应用示例(文件推流 桌面推流 本地摄像头 网络摄像头 转发推流 视频分发)_mediamtx

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

一、功能特点

1.1 文件推流
  1. 指定网卡和监听端口,接收网络请求推送音视频等各种文件。
  2. 实时统计显示每个文件对应的访问数量、总访问数量、不同IP地址访问数量。
  3. 可指定多种模式,0-直接播放、1-下载播放。
  4. 实时打印显示各种收发请求和应答数据。
  5. 每个文件对应MD5加密的唯一标识符,用于请求地址后缀区分访问哪个文件。
  6. 支持各种浏览器(谷歌chromium/微软edge/火狐firefox等)、各种播放器(vlc/mpv/ffplay/potplayer/mpchc等)打开请求。
  7. 播放过程中可以任意切换播放进度,支持倍速播放。
  8. 需要推流的文件名称历史记录自动存储和打开加载应用。
  9. 切换文件获取访问地址,自动拷贝地址到剪切板方便直接粘贴测试使用。
  10. 极低CPU占用,128路1080P同时推流不到1%CPU占用,异步发送数据机制。
  11. 纯QTcpSocket通信,不依赖流媒体服务程序,核心源码不到500行,注释详细,功能完整。
  12. 支持Qt4/Qt5/Qt6任意版本,支持任意系统(windows/linux/macos/android/嵌入式linux等)。

公众号:Qt实战,各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发。

公众号:Qt入门和进阶,专门介绍Qt/C++相关知识点学习,帮助Qt开发者更好的深入学习Qt。多位Qt元婴期大神,一步步带你从入门到进阶,走上财务自由之路。

1.2 网络推流
  1. 支持各种本地视频文件和网络视频文件。
  2. 支持各种网络视频流,网络摄像头,协议包括rtsp、rtmp、http。
  3. 支持将本地摄像头设备推流,可指定分辨率和帧率等。
  4. 支持将本地桌面推流,可指定屏幕区域和帧率等。
  5. 自动启动流媒体服务程序,默认mediamtx(原rtsp-simple-server),可选用srs、EasyDarwin、LiveQing、ZLMediaKit等。
  6. 可实时切换预览视频文件。
  7. 推流的清晰度和质量可调。
  8. 可动态添加文件、目录、地址。
  9. 视频文件自动循环推流,如果视频源是视频流,在掉线后会自动重连。
  10. 网络视频流自动重连,重连成功自动继续推流。
  11. 网络视频流实时性极高,延迟极低,延迟时间大概在100ms左右。
  12. 推流后除了用rtmp地址访问以外,还支持直接hls/webrtc访问,可以直接浏览器打开看实时画面。
  13. 支持Qt4/Qt5/Qt6任意版本,支持任意系统(windows/linux/macos/android/嵌入式linux等)。

二、使用步骤

2.1 文件推流
  1. 选择或者填写要监听的网卡IP地址,填写好监听端口,建议默认即可。
  2. 单击添加文件或者目录,选择要加入推流的音视频文件,添加成功以后会自动罗列在表格中。
  3. 单击启动服务按钮,会变成停止服务字样表示启动服务成功。
  4. 从表格中选中一行,会自动将该音视频文件的播放地址填写到右下角,同时也会自动拷贝到剪切板。
  5. 将地址粘贴到浏览器地址栏回车即可查看播放音视频,可以任意切换播放进度。
  6. 将地址用vlc或者其他播放器打开即可查看播放音视频,可以任意切换播放进度。
  7. 文件推流服务支持多个同时请求,表格中会显示每个文件对应正在请求中的数量,右下角也有统计总请求数量,还有统计不同IP地址的请求总数。
  8. 单击停止服务按钮会停止所有服务,由于存在缓存的关系,停止以后缓存中的视频还可以继续播放,过一段时间就不能播放。
  9. 在启动服务后支持动态添加文件、移除文件、清空文件。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人**

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Qt中实现摄像头推流,您可以使用Qt的Multimedia模块中的Camera和MediaRecorder类,以及Qt的Network模块中的QTcpSocket和QTcpServer类。 以下是一个简单的示例代码,可以帮助您开始推流: ```cpp #include <QtWidgets> #include <QtMultimedia> #include <QtNetwork> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建摄像头 QCamera *camera = new QCamera; camera->setCaptureMode(QCamera::CaptureVideo); // 创建媒体录制器,并将摄像头作为输入源 QMediaRecorder *recorder = new QMediaRecorder(camera); recorder->setOutputFormat(QMediaRecorder::Mpeg4Format); recorder->setVideoEncodingBitRate(1000000); recorder->setVideoFrameRate(30); // 创建网络连接 QTcpSocket *socket = new QTcpSocket; socket->connectToHost("192.168.1.100", 1234); // 当连接成功时,开始录制并将视频数据写入套接字 QObject::connect(socket, &QTcpSocket::connected, [recorder, socket](){ recorder->record(); QObject::connect(recorder, &QMediaRecorder::videoFrameProbed, [socket](const QVideoFrame &frame){ if (!frame.isValid()) return; QVideoFrame cloneFrame(frame); cloneFrame.map(QAbstractVideoBuffer::ReadOnly); QByteArray bytes((char*)cloneFrame.bits(), cloneFrame.mappedBytes()); socket->write(bytes); }); }); return app.exec(); } ``` 在这个示例中,我们创建了一个摄像头并设置其捕获模式为视频。然后,我们创建了一个媒体录制器,并将摄像头作为其输入源。接下来,我们创建了一个QTcpSocket并连接到远程主机的IP地址和端口号。当套接字成功连接时,我们开始录制视频,并将每个视频帧写入套接字。 请注意,该示例仅用于演示目的。在实际应用中,您需要处理错误和异常情况,并进行更多的测试和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值