vue播放rtsp流方案

news/2025/10/13 15:10:53/文章来源:https://www.cnblogs.com/angia/p/19138455

前言
如果rtsp没有H265的,建议直接使用webrtc-stream,简单好用,参考我之前的笔记:基于WebRtc的web播放大华海康rtsp视频流(延迟一秒以内) - Stitchhhhh - 博客园
项目地址:https://github.com/mpromonet/webrtc-streamer/releases
使用方法参考(感谢博主):https://blog.csdn.net/qq_20937557/article/details/129879697

 

如果有H265的视频流,可用以下几种方式实现:

一、rtsp2web+ffmpeg

参考:rtsp2web https://blog.csdn.net/csdn_yudong/article/details/124124137
优点:使用方法简单,传入rtsp视频流,直接播放;支持H265;前端使用jsmpeg.js延迟低;能使用H5直接播放;
个人使用认为的不足之处:
1、前端使用jsmpeg.js时,延迟很低,没有卡顿花屏,但是没有全屏功能,不过使用js实现一下也很简单;
使用flv.js时,延迟较大,卡顿比较严重,没有找到合适的办法解决;
2、在windows中部署没有问题,但是我在ubuntu18(其它linux的没有试)中没有部署成功,试过了安装ffmpeg从3、4、5、6各种版本的各种安装方式,使用ffmpeg命令都能正常处理视频流,但是在rtsp2web都没能成功;因为没有日志,没有办法找到问题和解决问题,虽然付费作者也没有给解决办法;
3、作者在视频加了水印,需找作者付费去除水印,知识付费也能理解,但是遇到的问题作者都没有给出解决办法,加上没有日志的处理,有问题时难以解决;

二、node-rtsp-stream+ffmpeg

前端也是使用jsmpeg.js,跟rtsp2web类似,也使用websocket;使用vue的可以使用此方法。

三、重点推荐:mediamtx(原rtsp-simple-server)

项目地址:https://github.com/bluenviron/mediamtx/tree/main
参考(感谢博主):https://blog.csdn.net/qq_20937557/article/details/132271507?spm=1001.2014.3001.5501

先说优点:

不管是在windows还是linux,安装和使用都极其简单;
作者写的文档比较详细,使用过程中遇到的问题很少,不需要去参考其他文档;
在github上进行提问以及bug提交作者都能回复并及时修复bug,非常赞;
支持rtsp、rtmp、hsl;并且延迟处理的比较好;
集成webrtc可直接播放视频;
可进行视频访问加密处理;

1.安装ffmpeg
这个比较简单,网上教程也比较多,此处不做介绍。
ubuntu18.04上安装ffmpeg5.1可以参考:ubuntu18安装ffmpeg5 https://blog.csdn.net/haixiangyun/article/details/132583757

2.下载运行mediamtx_v1.0.0
下载地址:mediamtx下载地址

image

 不管是windows还是linux,都是有三个文件

image

 运行方式:

windows直接双击mediamtx.exe;
linux下在当前目录直接运行sudo ./mediamtx

mediamtx.yml文件的配置:配置成功后使用webrtc可以直接在网页中浏览视频
具体配置根据需求查询,下面内容主要讲webrtc的方式,hls方式延迟比较严重

 工作原理

RTSP 源 → mediamtx (WebRTC 转码) → WHEP/WHIP 协议 → 前端 WebRTC 播放

前端安装webrtc-player.js

<script setup lang="ts">
import { onMounted, onUnmounted, ref, nextTick } from "vue";
import { WebRTCPlayer } from "@eyevinn/webrtc-player";const count = ref(0);
let player: WebRTCPlayer | null = null;
let retryTimer: any = null;
const loading = ref(true); // 控制加载中提示的状态

const initVideo = async () => {const video = document.querySelector("video") as HTMLVideoElement;if (!video) return;video.muted = true;// 如果之前存在 player,销毁它,确保不复用旧连接if (player) {player.destroy();player = null;}player = new WebRTCPlayer({video,type: "whep",statsTypeFilter: "^candidate-*|^inbound-rtp",});player.on("connectionstatechange", (state: any) => {console.log("Connection:", state);if (state === "failed" || state === "disconnected") {clearTimeout(retryTimer);retryTimer = setTimeout(initVideo, 2000);}});try {// 设置加载提示loading.value = true;// 防止缓存问题,确保请求不被缓存const videoUrl = new URL("http://192.168.137.131:8889/cam_h264/whep");videoUrl.searchParams.set('nocache', Date.now().toString());  // 添加唯一参数防止缓存// 加载视频流
    await player.load(videoUrl);player.unmute();await video.play();// 视频播放成功,隐藏加载提示loading.value = false;} catch (err) {console.warn("Playback failed:", err);loading.value = false;}
};onMounted(() => {nextTick(() => setTimeout(initVideo, 200));setInterval(() => count.value++, 1000);
});onUnmounted(() => {clearTimeout(retryTimer);if (player) {player.destroy();  // 确保销毁 WebRTC 连接player = null;}
});
</script><template><div class="app-container"><div><h2>视频展示{{ count }}s</h2><!-- 加载中提示 --><div v-if="loading" class="loading-overlay"><span>加载中...</span></div><video style="width: 100%; height: 700px" playsinline /></div></div>
</template><style scoped>
.loading-overlay {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);font-size: 24px;color: white;background: rgba(0, 0, 0, 0.5);padding: 20px;border-radius: 8px;
}
</style>

但是这种方式有个问题就是切换页面可以重新正常加载播放了,但是刷新就会直接加载失败,抛出错误:Playback failed: NotAllowedError: play() failed because the user didn't interact with the document first.
这是因为浏览器(特别是 Chrome、Edge、Safari)在执行 自动播放策略(Autoplay Policy)

 一句话解释原因

浏览器禁止页面在“用户未与页面交互(click、touch、key)”之前自动播放带声音的视频。

即使你设置了 video.muted = true,某些浏览器在页面 刚刷新 时,仍可能认为你没有“主动操作页面”,从而阻止自动播放。
解决方案只有使用“点击播放”等交互提示,在刷新时引导用户手动允许播放(最稳定)。
如果实在不愿意用交互的方式解决,最终版也可以直接使用iframe

 

 

 


参考原文出处链接:https://blog.csdn.net/haixiangyun/article/details/132489160

 

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

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

相关文章

有范同城全民任务小程序管理系统:连接厂家与播主的高效协作平台

一、概述总结 “有范同城全民任务小程序系统” 是一款基于微擎系统开发,聚焦同城场景的网红任务协作工具,同时支持微信公众号与微信小程序两大流量载体。系统核心定位为 “厂家与播主直接对接”,打破传统合作中间环…

2025年GEO(AI搜索优化)源头厂家权威推荐榜单:云视有客科技领跑行业

摘要 随着人工智能技术的快速发展,2025年GEO(AI搜索优化)行业迎来爆发式增长,企业对精准AI内容的需求日益迫切。本文基于技术参数、服务案例和用户口碑,深度解析国内顶尖GEO服务商,其中云视有客科技以干预延迟≤…

axi_ad9361_rx.v

axi_ad9361_rx.v// *************************************************************************** // *************************************************************************** // Copyright 2014 - 2017 (c)…

2025年GEO(AI搜索优化)公司口碑推荐排行榜单

摘要 随着AI技术的飞速发展,GEO(AI搜索优化)行业在2025年迎来爆发式增长,企业通过智能优化提升搜索效率和精准度,成为数字化转型的关键。本文基于行业数据和用户反馈,为您推荐2025年顶级GEO服务商,并附上详细比…

基于MATLAB的天线方向图综合与雷达天线设计

一、天线方向图综合基础理论 天线方向图综合是通过调整阵列单元激励参数(幅度、相位),使天线辐射方向图满足特定性能指标的过程。核心要素包括:阵列因子(AF) 描述阵列几何结构对辐射方向的影响,公式为:其中wn为…

​个人微信机器人开发

​个人微信机器人开发、微信二次开发机器人接口开发、java之微信机器人二次开发、微信机器人制作教程API文档接入指南 对接流程 1.申请api平台账号 2.开通接口权限 3.对接api 4.测试上线如何测试? 假如需要接收并处理…

Kong Gateway 实操实例:代理上游服务并配置限流插件 - 指南

Kong Gateway 实操实例:代理上游服务并配置限流插件 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

2025 年最新二手手机交易公司推荐排行榜:聚焦企业的专业与诚信实力,为消费者精选可靠选择

随着循环经济理念深入人心,二手手机交易市场迎来爆发式增长,但行业乱象也随之凸显。信息不透明导致消费者常遭遇 “货不对板”,电池健康度虚标、硬件隐患暗藏等问题频发;售后体系缺失让维权之路举步维艰,故障维修…

项目管理中的批量更新如何帮助节省时间和工作量?

批量更新(或批量编辑)是许多项目管理工具中的一项功能,允许您一次性更改多个项目(任务、问题、项目等)。此功能在管理项目时(尤其是大型或复杂的项目)可带来诸多益处。 您无需逐个打开每个任务或项目并更改字段…

深入解析:云服务器磁盘空间管理:binlog导致磁盘快速增长的应对策略与自动化实践

深入解析:云服务器磁盘空间管理:binlog导致磁盘快速增长的应对策略与自动化实践2025-10-13 14:51 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overf…

第三届大数据与数据挖掘国际会议(IEEE BDDM 2025)

数字经济浪潮中,全球数据量指数级增长,大数据与数据挖掘技术成为行业变革核心引擎。二者深度融合,通过高效处理海量复杂数据、提取关键信息辅助决策,在各领域创新应用不断涌现,创造巨大社会与经济效益。 在此背景…

CSS学习日记

2025.10.13 打卡 1. CSS选择器有五类:简单选择器(根据名称、id、类来选取元素) 组合器选择器(根据它们之间的特定关系来选取元素) 伪类选择器(根据特定状态选取元素) 伪元素选择器(选取元素的一部分并设置其样…

基于MATLAB的波导杆超声波传播仿真程序集设计与实现

1. 系统模型与核心算法 波导杆超声波传播的数值模拟需结合波动方程与波导边界条件,主要流程如下:几何建模:定义波导杆的几何参数(半径、长度、材料分层等)。 波动方程离散化:采用有限差分法(FDM)或有限元法(F…

for 循环中range的部分

range()函数的基本语法 range()函数用于生成一个指定范围内的数字序列,其基本语法如下: range(start, stop, step) Python start:可选参数,表示起始数字(默认为0)。 stop:必填参数,表示终止数字,不包括该数字…

2025中国不锈钢反应釜厂家TOP5权威推荐(附技术参数对比)

2025中国不锈钢反应釜厂家TOP5权威推荐(附技术参数对比)随着新能源产业与高端制造业的加速升级,反应釜设备作为化工、医药、锂电池材料等领域的核心生产载体,其性能稳定性与工艺适配性成为企业产能升级的关键。据智…

中电金信 :源启数据建模平台:自定义功能上线,实现高效模型管理

源启数据建模平台是源启数据资产平台面向企业模型统一管控而打造的多功能、全场景企业级模型设计与管理平台,支持企业级业务数据模型、应用系统模型及数据仓库模型的设计与管理。平台基于Web模式的画布界面,可实现逻…

国产软件项目管理革命:Gitee PPM如何重塑开发效率

国产软件项目管理革命:Gitee PPM如何重塑开发效率 在数字化转型浪潮席卷全球的当下,软件项目管理正面临前所未有的变革机遇。随着国内软件产业规模突破8万亿元大关,企业对高效、智能的项目管理工具需求呈现爆发式增…

网关本质论

Web应用网关:本质属于代理模式服务,将用户前端请求,通过代理服务,真实映射到真实物理服务器服务 代理层,得到HTTP请求后,可以做很多事情,例如身份认证、鉴权、API权限控制,限流,日志等

用最通俗易懂的方式解读以太坊的dAI团队和ERC-8004标准

给未来AI发“身份证”:以太坊的dAI计划为何让人兴奋? 想象一下,未来世界不再仅仅由人类上网冲浪、购物、工作,而是由无数个AI助手(我们叫它们“AI代理”)在为我们奔波。它们可以帮你比价购物、管理投资、甚至代表…

赋能智慧农业:ISUP协议视频平台EasyCVR智慧农业视频远程监控管理方案

赋能智慧农业:ISUP协议视频平台EasyCVR智慧农业视频远程监控管理方案在当今快速发展的农业领域,智慧农业已成为推动农业现代化、助力乡村全面振兴的新手段和新动能。随着信息技术的持续进步和城市化进程的加快,智慧…