web端播放rtsp视频流(摄像头监控视频)教程

文章目录

  • 前言
  • 一、ffmpeg是什么?
  • 二、ffmpeg安装
    • 1.下载
    • 2.安装
  • 三、node搭建websocket服务
  • 四、web客户端播放视频


前言

像海康大华一些摄像头或者直播源 为rtsp视频流,想在web上播放必须进行协议转换。已知一些方案例如rtsp转rtmp需要flash,现在浏览器基本不支持flash。还有转hls或者flv这些延迟都比较高。经过实践对比比较理想方案是 经转码后视频流通过websocket传送给客户端在将视频流解码成图片通过canvas渲染出来,延迟比较小基本在1s以内。所用工具(插件)为ffmpeg+node(node-rtsp-stream)+jsmpeg


一、ffmpeg是什么?

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案,简而言之就是一个可以转换各种视频流格式/协议的强大工具。

二、ffmpeg安装

1.下载

ffmpeg下载地址

在这里插入图片描述
进入官网选择window图标-点击windows builds form gyan.dev

在这里插入图片描述
进入内页下拉找ffmpeg-release-essentials.zip点击下载

下载完解压

在这里插入图片描述

在bin目录下有个ffmpeg.exe 程序运行入口
在这里插入图片描述

2.安装

  ffmpeg添加到全局环境变量

window+i 输入’环境变量’搜索打开系统属性窗口

在这里插入图片描述
点击环境变量,在系统变量中找到Path点击编辑

在这里插入图片描述
浏览-选择ffmpeg解压出来的bin目录

在这里插入图片描述
确定-确定-确定关闭窗口

添加成功后验证是否生效
任意地方打开Powershell窗口或cmd窗口
输入 ffmpeg 打印如下表示成功

在这里插入图片描述


三、node搭建websocket服务

此功能需要借助node-rtsp-stream插件,node-rtsp-stream是一个node环境下处理rtsp视频流插件,借助它能通过代码自动调用ffmpeg程序进行推流拉取转换并以websocket形式输出视频流。
由于在node下搭建服务,所以电脑要先安装node环境。怎么安装node环境自行查找其他教程。

新建一个app.js文件,同级目录下npm安装 node-rtsp-stream

npm install node-rtsp-stream -S

在这里插入图片描述
app.js写入:

const stream = require('node-rtsp-stream')new stream({name: 'video-stream',streamUrl: 'rtsp://xxxxx',//rtsp地址wsPort: 9999,//端口号ffmpegOptions: { '-stats': '', '-r': 30 ,//视频帧数'-s': '1920*1080' //视频分辨率}
})

运行

node app.js

在这里插入图片描述

出现上面打印一堆推流数据表示node服务启动成功,服务端工作就完成了

四、web客户端播放视频

web端用到jsmpeg插件播放视频,jsmpeg是个js插件能将视频流解码成图片并渲染出来。

jsmpeg.min.js下载地址:jsmpeg.min.js

新建index.html文件,jsmpeg.min.js放置同一个目录下,index.html写入

<!DOCTYPE >
<html><head><script src="./jsmpeg.min.js"></script><style>#video{width: 1000px;height: 600px;}</style></head><body><canvas id="video"></canvas><button onclick="onPlay()">播放</button><button onclick="onPause()">暂停</button><button onclick="onStop()">停止</button></body><script>var canvas = document.getElementById("video");var url = "ws://127.0.0.1:9999";var player = new JSMpeg.Player(url, { canvas });//开始播放function onPlay() {player.play();}//暂停播放function onPause() {player.pause();}//停止播放function onStop() {player.stop();}</script>
</html>

测试:打开运行index.html,成功播放

在这里插入图片描述

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

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

相关文章

网站被挂黑链怎么办

网站被挂黑链这种事情总是防不胜防&#xff0c;且不说网站本身的安全防护做的是否到位&#xff0c;但只要被盯上了就难逃厄运。即使是企业机构的网站也难逃被黑的经历&#xff0c;更何况用户苦心经营的网站&#xff0c;因此首先需要正确看待挂黑链这个现象&#xff0c;网站被挂…

如何实现在IDEA中远程访问家里或者公司的数据库远程协作开发

文章目录 1. 本地连接测试2. Windows安装Cpolar3. 配置Mysql公网地址4. IDEA远程连接Mysql小结 5. 固定连接公网地址6. 固定地址连接测试 IDEA作为Java开发最主力的工具&#xff0c;在开发过程中需要经常用到数据库&#xff0c;如Mysql数据库&#xff0c;但是在IDEA中只能连接本…

十一、HTML 图像

1、插入图像 本例演示如何在网页中显示图像。 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>插入图像</title> </head><body><p>一个图像:<img src"smiley.gif" alt"Smiley …

使用Android Compose实现网格列表滑到底部的提示信息展示

文章目录 概述1 效果对比1.1 使用添加Item的办法&#xff1a;1.2 使用自定义的方法 2. 效果实现2.1 列表为空时的提示页面实现2.2 添加Item的方式代码实现2.3 使用自定义的方式实现 3. UI工具类 概述 目前大多数的APP都会使用列表的方式来呈现内容&#xff0c;例如淘宝&#x…

C#,入门教程(12)——数组及数组使用的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(11)——枚举&#xff08;Enum&#xff09;的基础知识和高级应用https://blog.csdn.net/beijinghorn/article/details/123917587 数组是一种数据集合&#xff0c;是一组完全相同的、按顺序存放的数据。 需要记住数组的几个特征&…

如何查询关键词的KD与搜索量

随着海外贸易的不断发展&#xff0c;越来越多的小伙伴们从事外贸行业&#xff0c;但是随着面对有限的市场和激烈的竞争&#xff0c;很多从业者往往流量的来源比较单一&#xff0c;那就是付费流量&#xff0c;包括谷歌ads&#xff0c;facebook等一些投流广告。广告的好处是当你付…

OpenMMLab教程:OpenMMLab介绍与安装

一、 OpenMMLab介绍 OpenMMLab 是一个用于学术研究和工业应用的开源算法体系&#xff0c;于2018年年中开始&#xff0c;由 MMLab&#xff08;香港中文大学多媒体实验室&#xff09;和商汤科技联合启动。OpenMMLab 致力于为计算机视觉领域的重要方向创建统一且开源的代码库&…

开始卷TED:第1篇 —— 《Embrace the near win》—— part: 2

But this is the thing: What gets us to convert success into mastery? 问题来了&#xff1a;我们如何将一次成功转化为卓越的成就呢&#xff1f; mastery convert This is a question I’ve long asked myself. I think it comes when we start to value the gift of a n…

图连通性,Tarjan算法

前言 通常说的Tarjan算法指的是计算机科学家Robert Tarjan提出的多个与图连通性有关的算法&#xff0c;通常包括&#xff1a; 强连通性 有向图的强连通分量&#xff08;SCC&#xff09;缩点 无向图的边双连通性 割边无向图的边双连通&#xff08;e-DCC&#xff09;分量缩点 无…

美餐支付 - PHP代碼实现

前言 背景 前段时间&#xff0c;因接手的项目需要实现 美餐支付 的功能对接 在此记录一下鄙人的实现步骤&#xff0c;方便有需要的道友参考借鉴 场景描述 我们的 “现代膳食” 售卖机&#xff0c;可以在屏幕上显示可配送的餐食 用户选中商品后&#xff0c;点击购买 选择 “美餐…

铸铁检验平台主要应用在哪些行业中——河北北重

铸铁检验平台可应用于以下行业&#xff1a; 汽车制造业&#xff1a;用于检验汽车零部件的铸铁材质和质量&#xff0c;以确保零部件的可靠性和耐用性。 机械制造业&#xff1a;用于检验铸铁机械零部件的质量和性能&#xff0c;以确保机械设备的稳定运行。 建筑工程&#xff1a…

《罗素论教育》笔记

目录 全书架构 书简介 经典摘录 一、教育的理想 教育的基本原理 教育的目的 二、品性的教育 一岁前的教育 主要是2岁到6岁的教育 三、智力教育 14岁前的课程安排 最后的学年 大学教育 四、结束语 全书架构 书简介 经典摘录 一、教育的理想 教育的基本原理 1、我…

ROS学习笔记(二):话题通信、服务通信的了解和对应节点的搭建(C++)

ROS学习笔记&#xff08;二&#xff09;&#xff1a;话题通信、服务通信的了解和对应节点的搭建&#xff08;C和Python&#xff09; 前言一、Topics话题通信&#xff08;C&#xff09;0、自定义msg消息类型文件1、发布者&#xff08;Publisher&#xff09;2、订阅者&#xff08…

thinkphp递归实现无限级子分类合并上级children

//设别分类列表public function getCategoryList(){$list = Db::name(categorys)->select(

MODBUS转PROFINET网关与全数字交流伺服配置案例

MODBUS转PROFINET网关连接与全数字交流伺服驱动系统的配置案例&#xff0c;这一通信方式极大地简化了工业自动化系统中的数据传输和控制过程。变频器和伺服电机可以实现数据交流和控制指令的实时传输&#xff0c;从而实现更精确更高效的生产过程。 案例简介&#xff1a;本案例是…

跟我学java|Stream流式编程——Stream 基础

一、流式编程的概念和作用 Java 流(Stream)是一连串的元素序列&#xff0c;可以进行各种操作以实现数据的转换和处理。流式编程的概念基于函数式编程的思想&#xff0c;旨在简化代码&#xff0c;提高可读性和可维护性。 Java Stream 的主要作用有以下几个方面&#xff1a; 简化…

苹果Find My查找芯片-伦茨科技ST17H6x支持苹果Find My认证

Apple「查找」Find My可通过庞大的“Apple Find My Network” 实现全球查找功能。无数iOS、iPadOS、macOS、watchOS激活设备与Find My 设备结合在一起&#xff0c;无需连接到Wi-Fi或者蜂窝网络&#xff0c;用户也可以给遗失的设备定位。对于任何iOS、iPadOS、macOS、watchOS设备…

el-dialog的modal-class

今天发现个事 <el-dialogv-model"bindDialogVisible":title"bindDialogTitle"append-to-bodyclose-on-press-escapedraggablemodal-class"bindNdevice-dialog"width"500px"></el-dialog> 这个样式这样写生效 <style …

【Docker】私有仓库

目录 1.搭建 2. 上传镜像 3.拉取镜像 1.搭建 1.拉取私有仓库的镜像 docker pull registry 2.创建私有仓库容器 docker run -id --nameregistry -p 5000:5000 registry 3.打开浏览器,输入地址&#xff08;http:私有仓库服务器ip:5000/v2/_catalog&#xff09; 出现如图表示私…

【数据结构】栈的基本知识详解

栈的基本概念与基本操作 导言一、栈的基本概念1.1 栈的定义1.2 栈的重要术语1.3 栈的数学性质 二、栈的基本操作结语 导言 大家好&#xff0c;很高兴又和大家见面了&#xff01;&#xff01;&#xff01; 今天开始&#xff0c;咱们将正式进入【数据结构】第三章的内容介绍。在…