背景:

        公司采购了新的摄像头,通过rtsp或者rtmp推流到云平台,云平台内部进行转码处理,客户端使用HLS或HTTP-FLV播放,移动App可能使用HLS或私有SDK,超低延时则采用WebRTC。

技术选型:

RTSP:传统监控行业标准,NVR 和本地播放首选,但外网穿透困难。

RTMP:直播推流的常用协议,穿透性好,CDN 支持佳,但实时性略逊。

HTTP-FLV:Web 播放友好,穿透性好,延迟低,适合 Web 端直播。

HLS:Web 和移动端播放的首选,穿透性好,自适应码率,但延迟高。

WebRTC:超低延迟,适合实时互动场景,但实现复杂且服务器开销可能大。

注意:WebRTC在当前2025年5月得到的消息小程序源生不支持需依赖平台sdk,而且移动端也需要适配WebView

本文提供两种实现方案

方案一:使用阿里的视频直播服务(需要有域名)

第一步:创建推流域名和播流域名

第二步:把提供的CNAME配置到域名解析中

第三步:创建直播地址

第四步:推流

这是阿里的官方文档模拟推流如何通过不同设备实现标准和超低延时直播推流_视频直播(LIVE)-阿里云帮助中心

作者采用OBS Studio实现推流

本文以Windows端OBS v27.2.3版本为例介绍使用OBS推流,其他平台及版本操作类似。

  1. 下载并安装OBS推流工具。下载地址,请参见OBS Studio。

  2. 运行OBS推流工具。

  3. 在菜单栏中选择文件 > 设置

  4. 在设置页面选择推流,配置信息如下所示:

    001

    参数

    描述

    服务

    选择自定义

    服务器

    输入已经生成的鉴权推流地址,例如:rtmp://demo.aliyundoc.com/app/stream?auth_key=1543302081-0-0-9c6e7c8190c10bdfb3c0************

    串流密钥

    串流密钥为空。

  5. 在OBS主界面来源区域添加推流源,然后单击开始推流

    002

  6. 进入流管理,在在线流中查看并管理已推的音视频流

第五步:直播(作者采用h5网页直播,把代码中flvUrl换成自己的M3U8 格式播流地址中就好了就好了)

<!DOCTYPE html>
<html>
<head><title>FLV直播播放器</title><style>#flv-player {width: 800px;max-width: 100%;background: #000;}</style>
</head>
<body><video id="flv-player" controls muted playsinline></video><!-- 引入flv.js库 --><script src="https://cdn.jsdelivr.net/npm/flv.js@1.6.2/dist/flv.min.js"></script><script>const videoElement = document.getElementById('flv-player');const flvUrl = 'http://demo.aliyundoc.com/live_ali/live_ali123.flv?auth_key=1753323502-0-0-3508789f6f105175f2ff16dd4ccf102a'; // 替换为实际FLV流地址// 1. 检测浏览器支持性if (flvjs.isSupported()) {const flvPlayer = flvjs.createPlayer({type: 'flv',          // 必须指定为flvisLive: true,         // 直播模式hasAudio: false,      // 根据实际流启用hasVideo: true,url: flvUrl,enableStashBuffer: false // 禁用缓冲以降低延迟}, {enableWorker: true,   // 启用Web WorkerlazyLoadMaxDuration: 3 * 60, // 内存优化seekType: 'range'     // 支持Range请求});// 2. 绑定视频元素flvPlayer.attachMediaElement(videoElement);// 3. 加载并播放flvPlayer.load();videoElement.play().catch(e => {console.error('自动播放失败:', e);// 显示播放按钮让用户手动触发});// 4. 错误处理flvPlayer.on(flvjs.Events.ERROR, (errType, errDetail) => {console.error('播放错误:', errType, errDetail);if (errType === flvjs.ErrorTypes.NETWORK_ERROR) {// 网络错误尝试重连setTimeout(() => flvPlayer.unload().load(), 3000);}});} else {fallbackToHLS(); // 降级方案}// 5. 资源释放window.addEventListener('beforeunload', () => {flvPlayer?.destroy();});</script>
</body>
</html>

方案二:自己实现rtsp推流转码WebRTC

架构图:

本文只介绍其中一条链路

rtsp推流WebRTC播放(链路是ffmpeg->MediaMTX-WebRTC)

代码在这通过网盘分享的文件:video-transcoding.zip
链接: https://pan.baidu.com/s/1CzuYn-5hmrnQCA6Q_W5kmQ 提取码: irqe

这是一个java项目,简化的流媒体解决方案,使用MediaMTX作为流媒体服务器,支持RTSP推流和WebRTC播放,集成JWT认证系统。

根据项目README操作就行了

需要注意博主默认tcp传输所以推流的时候如果提示461 Unsupported Transport

请换成ffmpeg -re -f lavfi -i testsrc=size=1280x720:rate=30 -c:v libx264 -preset ultrafast -tune zerolatency -rtsp_transport tcp -f rtsp rtsp://admin:admin123@localhost:8554/live

如有其他问题欢迎和私信作者一起讨论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90758.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90758.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/90758.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day33:零基础学嵌入式之网络——TCP并发服务器

一、服务器1.服务器分类单循环服务器&#xff1a;只能处理一个客户端任务的服务器并发服务器&#xff1a;可同时处理多个客户端任务的服务器二、TCP并发服务器的构建1.如何构建&#xff1f;&#xff08;1&#xff09;多进程&#xff08;每一次创建都非常耗时耗空间&#xff0c;…

VR全景制作的流程?VR全景制作可以用在哪些领域?

VR全景制作的流程&#xff1f;VR全景制作可以用在哪些领域&#xff1f;VR全景制作&#xff1a;流程、应用与未来虚拟现实&#xff08;VR&#xff09;全景制作正迅速改变我们的感官体验&#xff0c;使我们能够身临其境地探索虚拟世界&#xff0c;享受沉浸式的奇妙感受。那么&…

用LangChain重构客服系统:腾讯云向量数据库+GPT-4o实战

人们眼中的天才之所以卓越非凡&#xff0c;并非天资超人一等而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。———— 马尔科姆格拉德威尔 目录 一、传统客服系统痛点与重构价值 1.1 传统方案瓶颈分析 1.2 新方案技术突破点 二、系统架构设计&…

主要分布在腹侧海马体(vHPC)CA1区域(vCA1)的混合调谐细胞(mixed-tuning cells)对NLP中的深层语义分析的积极影响和启示

腹侧海马体CA1区&#xff08;vCA1&#xff09;的混合调谐细胞&#xff08;mixed-tuning cells&#xff09;通过整合情感、社会关系、空间概念等多模态信息&#xff0c;形成动态的情景化语义表征&#xff0c;为自然语言处理&#xff08;NLP&#xff09;的深层语义分析提供了重要…

ESP32的ADF详解:6. Audio Processing的API

一、Downmix 1. 核心功能 将基础音频流和新加入音频流混合为单一输出流&#xff0c;支持动态增益控制和状态转换。输出声道数与基础音频一致&#xff0c;新加入音频自动转换声道匹配。2. 关键特性声道处理 输出声道数 基础音频声道数新加入音频自动转换声道&#xff08;如立体…

Qt(基本组件和基本窗口类)

一、基本组件1. Designer设计师为什么要上来先将这个东西呢&#xff0c;这个是QT外置的设计界面的工具&#xff0c;没啥用&#xff0c;所以了解一下。我们用的多的是QT内置的界面设计&#xff0c;只需要我们双击我们创建的项目的.ui文件就可以进入这个界面&#xff0c;你对界面…

docker与k8s的容器数据卷

Docker容器数据卷 特性 docker镜像由多个只读层叠加而成&#xff0c;启动容器时&#xff0c;Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件&#xff0c;那么该文件将会从读写层下面的只读层复制到读写层&#xff0c;该…

自然语言处理技术应用领域深度解析:从理论到实践的全面探索

1. 引言:自然语言处理的技术革命与应用前景 自然语言处理(Natural Language Processing,NLP)作为人工智能领域的核心分支,正在以前所未有的速度改变着我们的数字化生活。从最初的规则基础系统到如今基于深度学习的大语言模型,NLP技术经历了从理论探索到实际应用的深刻变…

OpenGLRender开发记录(二): 阴影(shadowMap,PCF,PCSS)

目录已实现功能阴影shadowMapPCFPCSS实现shadowMapPCFPCSS阴影GitHub主页&#xff1a;https://github.com/sdpyy1 OpenGLRender:https://github.com/sdpyy1/CppLearn/tree/main/OpenGL 已实现功能 除了上次实现IBL之外&#xff0c;项目目前新增了imGUI的渲染&#xff0c;更方便…

Linux:日志乱码

1、Linux日志乱码可能是XShell客户端编码没设置为UTF-8引起的&#xff0c;按照以下步骤&#xff0c;设置终端格式&#xff1a;中文版&#xff1a;打开Xshell会话属性&#xff08;文件→属性→终端→编码&#xff09;&#xff0c;选择与服务器一致的编码格式&#xff08;如UTF-8…

Rouge:面向摘要自动评估的召回导向型指标——原理、演进与应用全景

“以n-gram重叠量化文本生成质量&#xff0c;为摘要评估提供可计算标尺” Rouge&#xff08;Recall-Oriented Understudy for Gisting Evaluation&#xff09; 是由 南加州大学信息科学研究所&#xff08;ISI&#xff09;的Chin-Yew Lin 于2004年提出的自动文本摘要评估指标&am…

[STM32][HAL]stm32wbxx 超声波测距模块实现(HY-SRF05)

前言 在电子技术应用中,距离测量是一个常见且重要的需求。超声波模块因其测量精度较高、成本较低、易于使用等优点,被广泛应用于机器人避障、液位检测、智能停车系统等领域。该文主要讲解以stm32wb芯片为主控,用HAL库来对HY-SRF05超声波模块进行代码编写,实现基本的驱动和测…

MySQL 性能调优实战指南:从诊断到优化全解析

引言在日常的数据库运维工作中&#xff0c;我们经常需要对 MySQL 数据库进行诊断和性能分析。本文将介绍一套全面的 MySQL 诊断脚本&#xff0c;适用于 MySQL 8.0&#xff08;兼容 8.0.15 及以上版本&#xff09;&#xff0c;涵盖事务锁分析、性能瓶颈定位、配置检查、连接状态…

8. 状态模式

目录一、应用背景二、状态模式2.1 解决的问题2.2 角色2.3 实现步骤三、通用设计类图四、实现4.1 设计类图4.2 状态转换图4.3 代码实现一、应用背景 某对象发生变化时&#xff0c;其所能做的操作也随之变化。应用程序的可维护性和重用性差代码的逻辑较复杂 二、状态模式 2.1 …

php语法--foreach和in_array的使用

文章目录foreach基础语法&#xff1a;案例1&#xff1a;引用传递模式&#xff1a;嵌套数组处理&#xff1a;避免在循环中计算数组长度&#xff1a;使用引用减少内存拷贝&#xff1a;打印数组in_array基础使用严格使用foreach 基础语法&#xff1a; foreach ($iterable as $va…

ES6模块详解:核心语法与最佳实践

以下是 EMAScript 6&#xff08;ES6&#xff09;模块规范的核心要点及细节解析&#xff1a; &#x1f4e6; 一、核心语法导出&#xff08;export&#xff09; 命名导出&#xff1a;支持导出多个具名成员。export const a 1; export function b() { /* ... */ } // 或集中导出 …

Python day25

浙大疏锦行 Python day25. 内容&#xff1a; 异常处理&#xff0c;在日常的编码工作过程中&#xff0c;为了避免由于各种bug导致的异常情况&#xff0c;我们需要引入异常处理机制&#xff0c;它的工作场景是当程序运行出现意外时&#xff0c;可以根据编码规则处理响应的错误。…

mac llama_index agent算术式子计算示例

本文通过简单数学计算&#xff0c;示例llama_index使用agent解决复杂任务过程。 假设mac本地llama_index环境已安装&#xff0c;过程参考 mac测试ollama llamaindex-CSDN博客 测试mac笔记本内存8G&#xff0c;所以使用较小LLM完成示例。 ollama pull qwen3:1.7b qwen3:1.7b能…

uni-app小程序云效持续集成

创建项目 必须是 cli 命令行创建的 uni-app 小程序项目参考uni-app官方构建命令&#xff1a; npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project生成小程序代码上传密钥 管理-开发设置-小程序代码上传生成的文件放在根目录即可 安装持续集成插件 pnpm install uni-mi…

uniapp+高德地图实现打卡签到、打卡日历

一、注册高德地图。应用管理创建应用&#xff0c;分别添加Andriod平台、Web服务、Web端、微信小程序四种类型的key。二、考勤规则打卡地点选择位置代码&#xff1a;<script setup lang"ts"> import { onMounted, onUnmounted, reactive, ref, watchEffect } fr…