Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >轻松实现在web页面中直接播放rtsp视频流「建议收藏」

轻松实现在web页面中直接播放rtsp视频流「建议收藏」

作者头像
全栈程序员站长
发布于 2022-11-07 07:46:04
发布于 2022-11-07 07:46:04
8.5K00
代码可运行
举报
运行总次数:0
代码可运行

轻松实现在web页面中直接播放rtsp视频

写在前面

我之前研究在 web 中直接播放 rtsp 视频流时,写过一篇文章:【前端】rtsp 与 rtmp 视频流的播放方法。阅读这篇文章对你的学习有很大帮助。在文章中我有过详细的分析和解读,并给出了 结论:

【要想在 web 中实时播放 rtsp 视频流:借助后端转码推流将是必要的操作。】

实现

我用 node.js 实现了转码推流的功能,并将其打包成 rtsp2web 发布到了 npm 上。

介绍

rtsp2web 是一个依赖 ffmpeg,能实时将传入的 rtsp 视频流转码成图像数据并通过 ws 推送到前端的智能工具。

前端页面借助 jsmpeg.js 就可以很轻松的实现播放啦~

而且 rtsp2web 还有以下特点:

  • 并发,支持同时播放多路视频。
  • 合并同源,同时播放多个同一个rtsp视频源时,只会创建一个转码推流进程,不会创建多个。
  • 智能释放资源,智能检测当前没有使用的转码推流进程,将其关闭,并释放电脑资源。

如何使用

使用 rtsp2web 是简单的;你只需:

准备ffmpeg

首先,你得确保你的电脑上安装了 ffmpeg。 我已经将我的 windows 64位电脑上使用的 ffmpeg 上传到了资源库中,如果你的电脑上没有,你可以点击下载并解压安装。(不会可以找我)

安装成功以后,你重新打开一个命令行终端,输入:ffmpeg -h,如果能输出 ffmpeg 的相关信息出来,则证明你的电脑安装 ffmpeg 成功。

运行rtsp2web

创建一个空的目录(目录名不能是rtsp2web),进入目录后,依次运行下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm init --yes
npm i rtsp2web

创建 index.js,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// index.js

const RTSP2web = require('rtsp2web')

// 服务端长连接占据的端口号;端口号可以自定义
const port = 9999
// 分辨率
const videoSize = '1920x1080'

new RTSP2web({ 
   
    port,
    videoSize 
})

运行命令: node index.js 即可。

到此,你的视频转码服务就已经运行起来了。

参数说明

参数

解释说明

port

转码服务占用的端口号;(type:Number)默认值:9999

videoSize

摄像头分辨率;(type:String)默认值:‘1920×1080’ 如果播放出来的视频花屏,马赛克,比例不对等等问题,可以调整这个参数

前端代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no,viewport-fit=cover">
<script src="https://jsmpeg.com/jsmpeg.min.js" charset="utf-8"></script>
<title>播放rtsp</title>
</head>
<body>
<canvas id="canvas" style="width: 600px; height: 600px;"></canvas>
</body>
<script> var rtsp = 'rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4' window.onload = () => { 
 // 将rtsp视频流地址进行btoa处理一下 new JSMpeg.Player("ws://localhost:9999/rtsp?url="+btoa(rtsp), { 
 canvas: document.getElementById("canvas") }) } </script>
</html>

不管你的前端是用原生的 html 还是在 React、Vue 等框架中使用,操作起来都非常简单。

1、你需要先在全局的模板 html 文件头部引入 jsmpeg.js 或者 jsmpeg.min.js

2、创建一个 canvas 容器,用来播放视频的;

3、创建视频源播放实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var rtsp = 'rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4'
// 将rtsp视频流地址进行btoa处理一下
new JSMpeg.Player("ws://localhost:9999/rtsp?url="+btoa(rtsp), { 

canvas: document.getElementById("canvas")
})

JSMpeg.Player 第一个参数是拼接转码链接 'ws://localhost:9999/rtsp?url=' + btoa(rtsp); 第二个参数是一个对象,对象属性包含 canvas

课外知识

node install –unsafe-perm 是什么作用?

就是说 npm 出于安全考虑不支持以 root 用户运行,即使你用 root 用户身份运行了,npm 会自动转成一个叫 nobody 的用户来运行,而这个用户几乎没有任何权限。这样的话如果你脚本里有一些需要权限的操作,比如写文件(尤其是写 /root/.node-gyp),就会崩掉了。 为了避免这种情况,要么按照 npm 的规矩来,专门建一个用于运行 npm 的高权限用户;要么加 –unsafe-perm 参数,这样就不会切换到 nobody 上,运行时是哪个用户就是哪个用户,即使是 root

经常是安装 node-sass 的时候会很容易出现因为权限不够无法创建目录的问题 官网文档: https://docs.npmjs.com/misc/config#unsafe-perm

—————————— 【正文完】——————————

写在最后: 约定优于配置 —— 软件开发的简约原则

——————————【完】——————————

我的: 个人网站: https://neveryu.github.io/neveryu/ Github: https://github.com/Neveryu 新浪微博: https://weibo.com/Neveryu

更多学习资源请关注我的新浪微博…好吗

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183623.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于 WebRTC 的 RTSP 视频实时预览
由于项目需要,需要使用摄像头预览功能,设备型号为海康威视。目前已存在的基于 FFmpeg 的方案延迟都太高,所以项目最终选择基于此方案。
ruochen
2021/11/21
1.9K0
前端如何实现整套视频直播技术流程
首先说明,本篇文章是概念+实践,对于希望了解和实践一个简单的摄像头直播网页功能的人会有帮助,由于篇幅和实践深入度有限,目前demo效果只支持直播播放电脑端以及常用摄像头的实时视频流,其他复杂的功能(例如视频信息实时处理,高并发,网络分发等)尚未实现,还需要进一步探索。
全栈程序员站长
2022/09/15
3.3K0
前端如何实现整套视频直播技术流程
海康威视rtsp取流地址(海康威视设置教程)
本文目的主要是想要实时显示海康威视的摄像头数据,笔者尝试了如下几种方式(部分未做完):
全栈程序员站长
2022/08/01
23.3K0
海康威视rtsp取流地址(海康威视设置教程)
rtsp 获取视频流 java_浏览器无插件播放rtsp视频流 java后台 + js + html
现在安防设备普遍使用rtsp拉取视频流,要在网页播放rtsp视频流不可以直接实现,html不支持rtsp视频流, 所以需要进行转换成html5可以解析的帧数据然后在浏览器进行播放。传输数据流的长连接,网上很多都是node.js开发的http转websocket,借鉴采用java + netty 进行了这一步的转换。这个地方一定要搞清楚http和WS的区别,为啥要转WS。本文的核心就是http转ws+ js页面帧展示.
全栈程序员站长
2022/11/07
3.9K0
2024年WEB网页VUE直接播放海康威视、大华、华为RTSP/RTMP视频流方案大盘点
在遍地都是摄像头的今天,往往需要在各种信息化、数字化、可视化等B/S系统中集成实时视频流播放等功能,海康、大华、华为等厂家摄像头或录像机等设备一般也都遵循安防行业标准,支持国际标准的视频主流传输协议RTSP(实时视频流)输出,不幸的是Chrome、Edge、Firefox等新一代浏览器从2015年开始不再支持NPAPI插件加载运行,直接导致RTSP视频流从此无法在高版本浏览器网页中原生播放。对于绝大部分没有影视频处理经验的前、后端工程师来说是一个非常棘手的问题,专业性强,技术门槛高,而对做B/S系统集成的大多数公司来说,为了这部分的功能单独招聘专职音视频研发人员来负责的话,成本高昂不说,还未必做的好。
李不白
2023/10/19
4.2K0
2024年WEB网页VUE直接播放海康威视、大华、华为RTSP/RTMP视频流方案大盘点
Electron 低延迟视频流播放方案探索
去年最后一篇文章介绍了我们的 Electron 桌面客户端的一些优化措施,这篇文章也跟我们正在开发的 Electron 客户端有一定关系。最近我们正在预研在 Electron 页面中实时播放会议视频流的方案。
_sx_
2020/04/10
6.9K0
Electron 低延迟视频流播放方案探索
html播放rtsp流,浏览器播放rtsp视频流解决方案
最近项目中需要实时播放摄像头rtsp视频流,于是就专门做了些研究。而浏览器不能直接播放,只有通过插件或者转码来实现这个需求。
全栈程序员站长
2022/11/02
6.3K0
Nginx+FFmpeg打造自己的视频直播服务
现在很多项目都有视频实时播放的功能需求,例如监控,直播等,原始的摄像头采集的视频流协议一般都是 rtsp 协议,在旧版的浏览器中使用
ruochen
2021/11/24
6.1K0
几种浏览器播放RTSP视频流解决方案
Streamedian 提供了一种“html5_rtsp_player + websock_rtsp_proxy”的技术方案,可以通过html5的video标签直接播放RTSP的视频流。
音视频牛哥
2021/03/22
19.8K0
几种浏览器播放RTSP视频流解决方案
网页播放rtsp视频流
GitHub – vbence/stream-m: An HTML5-compatible live streaming server supporting the WebM and H.264 formats.
全栈程序员站长
2022/11/02
2.7K0
RTSP H264 流 MSE 播放
实现了浏览器 MSE (Media Source Extensions) 播放相机 RTSP (Real Time Streaming Protocol) 流。动手体验一下咯~
GoCoding
2021/07/20
2.4K0
[python小脚本]摄像头rtsp流转hls m3u8 格式web端播放
99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,战胜焦虑,战胜那些心里空荡荡的时刻,而不是选择逃避。不要站在原地想象困难,行动永远是改变现状的最佳方式
山河已无恙
2024/08/29
3590
[python小脚本]摄像头rtsp流转hls m3u8 格式web端播放
在Chrome、Firefox中低延迟播放海康、大华RTSP完全解决方案!
随着网络宽带的不断提升和智能手机的流行,RTSP实时视频流播放及处理不再局限于安防行业。在如道路、工厂、楼宇、学校、港口、农场、景区等诸多场景实施的信息化系统中,绝大多数都采用的是B/S架构,隐藏迫切需要在浏览器中嵌入多路摄像头RTSP流低延迟(小于500毫秒)播放功能,而在IE及Chrome 45以下版本等浏览器中,采用ActiveX控件或NPAPI插件即可实现。然而美好总是短暂的,从2015年开始Chrome及Firefox等浏览器纷纷取消了NPAPI插件的支持,而IE又在与Chrome
猿大师
2021/08/03
2.6K0
低延时播流之Jsmpeg
官网:http://jsmpeg.com/ Github:https://github.com/phoboslab/jsmpeg
码客说
2021/02/26
1.4K0
抓取视频网站的流媒体数据
打开VLC,点击媒体 -> 打开网络串流,添加网络流媒体链接: rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4
AnieaLanie
2021/12/30
3.5K0
在Chrome、Firefox等高版本浏览器中实现低延迟播放海康、大华RTSP
现在到处是摄像头的时代,随着带宽的不断提速和智能手机的普及催生出火热的网络直播行业,新冠病毒的大流行又使网络视频会议系统成为商务会议的必然选择,因此RTSP实时视频流播放及处理不再局限于安防行业。在如道路、工厂、楼宇、学校、港口、农场、景区等场景实施的信息化系统中,已基本全采用B/S架构,迫切需要在浏览器中嵌入多路摄像头RTSP流的超低延迟(小于500毫秒)播放功能,而在IE及Chrome 49以下版本等浏览器中,采用ActiveX控件或NPAPI插件即可实现。然而美好总是短暂的,从2015年开始Chrome及Firefox等浏览器纷纷取消了NPAPI插件的支持,而IE又在与Chrome及Firefox等浏览器竞争的过程中不断被用户抛弃,到现在市场份额已降到可怜的个位数。微软在几经折腾后,索性也拥抱Chromium内核推出Edge新版来杀死自己的IE,以挽救自己在浏览器这块岌岌可危的江湖地位。
BrowserApplet
2020/12/14
3.5K0
在Chrome、Firefox等高版本浏览器中实现低延迟播放海康、大华RTSP
在VUE框架的WEB网页端播放海康威视RTSP视频流完全方案
如果你问一个前端技术人员,近几年最火的前端框架技术是什么,肯定会有人说VUE,确实VUE凭借其简单特性赢得了大家的喜爱,而近期公司有个项目,需要在VUE框架网页上播放RTSP实时视频。
喵大侠
2021/10/29
4.1K1
网络摄像头RTSP视频流WEB端实时播放实现方案[通俗易懂]
IPC视频流怎么实时在WEB浏览器播放,视频流格式是RTSP。 下面我整理了自己实现的方案以及网上看到的一些方案
全栈程序员站长
2022/11/02
5.6K0
使用websocket做视频直播
笔者之前做一个实时监控应用的时候,曾搜索过一些将 iPhone 的摄像头拍摄的画面实时传输到浏览器的方案,一个都没有。
黄啊码
2020/05/29
6.6K0
rtsp html播放_浏览器视频播放rtsp
从摄像机获取的RTSP视频流直接在浏览器中播放,这里采用vlc插件进行播放,设置步骤如下
全栈程序员站长
2022/11/07
4.7K0
推荐阅读
相关推荐
基于 WebRTC 的 RTSP 视频实时预览
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验