当前位置:首页 > 后端 > 正文内容

【转】rtsp视频流实现浏览器h5播放

Z先生5年前 (2020-07-11)后端643

方案思路:

获取摄像头数据流 --> FFmpeg转码 --> Node.js(搭建webSocket服务器) --> 在服务器上运行jsmpeg程序


操作步骤

首先查看是否能够正常地获取摄像头的rtsp视频流

这里我们用VLC media player来验证

在网络串流中添加我们摄像头的rtsp路径:rtsp://admin:password@192.168.0.64:554

在这里插入图片描述


1.安装node.js和FFmpeg,并配置好环境变量

(百度搜索教程即可)

查询版本号可检查好环境变量是否配置成功

在这里插入图片描述


2.node.js安装http-server,开启命令行HTTP服务器

在node命令行下,输入 npm install http-server -g,安装成功后,将以下形式的路径添加进系统环境变量path中:

在这里插入图片描述


等需要启动node.js的http服务器时,输入http-server指令即可:

在这里插入图片描述


3.下载jsmpeg库

这里我们通过git克隆下载:git clone https://github.com/phoboslab/jsmpeg.git

(也可以进入其他仓库或网站下载jsmpeg库)


4.Node.js安装webSocket模块

在cmd控制台输入: npm install ws -g(或者npm install ws)

在这里插入图片描述


5.运行jsmpeg文件夹里面的websocket-relay.js

用新的cmd控制台进入jsmpeg文件夹,运行websocket模块:

指令格式:node websocket-relay.js 密码 ffmpeg推送端口 前端webSocket端口

示例:node websocket-relay.js password123456 8081 8082

在这里插入图片描述


6.运行ffmpeg进行视频转码并转发

用新的cmd控制台执行指令:

指令示例:ffmpeg -i “rtsp地址” -q 0 -f mpegts -codec:v mpeg1video -s 1366x768 http://127.0.0.1:8081/password123456

(如需视音频播放,参考格式如下:

ffmpeg -i in.mp4 -f mpegts -codec:v mpeg1video -s 960x540 -b:v 1500k -r 30 -bf 0 -codec:a mp2 -ar 44100 -ac 1 -b:a 128k out.ts)

在这里插入图片描述

1366x768为输出分辨率,http://127.0.0.1:8081/为视频输出地址,password123456为密码


7.查看浏览器显示效果

打开jsmpeg文件夹里面的view-stream.html页面,正常情况下,将显示如下页面:

在这里插入图片描述


注:

当我以个人主机作为服务器,允许其他用户访问view-stream.html页面时,出现了其他IP无法显示视频的情况(但可访问页面),最后尝试关闭主机防火墙问题才得以解决。

#(笔者最后发现这种方式对网络要求非常高,并不适合用在商用的项目,且效果完全不如用海康威视web开发包或直接在浏览器访问摄像头IP来的好。但由于海康威视官方没有给基于JavaWeb的demo,因此本文的方法无法达到萤石云的那种效果,该方法只能作为其他需求下视频转码的参考,如果要用javaWeb开发利用海康威视摄像头,还是需要读者自行研究)

PS:关于对网络要求高的问题,个人认为最好的解决方案是本地固定IP,然后本地安装nodejs以及本地转码,生成的视频地址通过第三方cdn转发,这样能保障播放速度。

另外一个就是视频分辨率的问题。

————————————————

版权声明:本文为CSDN博主「Staveabc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Staveabc/article/details/98194427


分享给朋友:

相关文章

php获取文件mime的方法,相对完整,并且已经测试

已经经过测试也相对完整,优先自带类和方法,如果自带类或者方法没有开启的情况下,通过文件扩展名实现,文件扩展名关联了176种如果实在没有开启相关组件也没有匹配到,那么就返回:application/oc...

PHP将图片自动缩放成指定大小:autoCropImage,含nginx伪静态

autoCropImage自己一直在用,并且加入了webp格式转换具体说明和介绍如下:autoCropImage - 图片自动缩放程序将图片自动缩放成指定大小,减少图片体积,从而加快下载速度,降低下载...

php array_column函数封装

array_column函数只支持php5.5.0以上版本,所以这里要封装下,这样可以兼容用法if (!function_exists("array_column"))&...

Composer的初步使用以及Composer切换国内源(阿里云)

Composer安装(Windows系统)下载:https://getcomposer.org/Composer-Setup.exe一步步安装即可。需要注意的是你需要开启 openssl 配置,我们打...

thinkphp6模型中联合主键、中间表调用的写法

前言Thinkphp框架是不错,但是一些特殊用法几乎找不到文档。模型就新手来说感觉会很麻烦,但是实际上习惯之后会很方便,比如入库和出库的自动格式化,再比如安全的入库。而且模型会让你养成良好的开发习惯,...

ThinkPHP6多应用下配置短路由 - TP6路由

ThinkPHP6多应用下配置短路由 - TP6路由

需要实现的效果:http://xx.com/u/RkdJ80 => http://xx.com/home/url/url/index实现步骤1. 设置tp6隐藏网址的index...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。
请先 登录 再评论,若不是会员请先 注册