Linux环境下使用flv.js + websokect播放RTSP视频流

本文适用于Linux系统部署Web项目,通过浏览器播放RTSP视频流

背景

​ 在最近的项目中,涉及到海康威视接入的视频监控播放问题,海康这边可以获取到的视频流是rtsp格式,web端目前没有直接可以播放的组件,于是查阅众多博客以及帖子,刷了不少Gitee和Github上的项目,总结出如下解决方案。

解决方案

​ 将RTSP视频流通过ffmpeg 转成flv格式流,然后通过WebSocket传输flv视频流至前端,通过WebSocket获取到视频流后,使用flv.js对视频流进行播放。

本文搭建环境使用Centos 7 Linux发行版,使用Windows11平台自带的Hyper-V虚拟化管理工具开启Centos7镜像

一、搭建本地RTSP视频流推送服务

模拟视频监控,创建RTSP视频流

参考文章:笔记本摄像头模拟监控推送RTSP流

二、Centos 7 安装Nodejs

参考文章:Centos 7 安装Node.js服务

三、 Centos7 安装 ffmpeg转流服务

参考文章:Centos 7 安装 ffmpeg

四、下载Gitee上开源的Html5播放RTSP流项目

Gitee项目地址:H5播放RTSP视频流: 服务端使用express+express-ws将rtsp转换为flv,通过websocket将flv流推送到前端进行显示 (gitee.com)

下载地址

五、将下载好的代码上传至Linux服务器

# 创建文件夹
cd /home
mkdir node
cd node
# 解压
unzip rtsp-to-flv-master.zip
# 启动项目
cd rtsp-to-flv-master
node index.js

注:如出现 Error Cannot find module ‘express’ 报错执行下方命令进行安装

npm install express

正常启动提示:Project is running at http://localhost:8888/

在物理机上打开浏览器,并在浏览器地址栏上输入地址 示例: http://192.168.1.89:8888/ 其中192.168.1.89为虚拟机IP地址。

如果出现404或者他访问失败问题,可以按照如下方法排查:

  1. 检查物理机是否可以ping通虚拟机

    ping 192.168.1.89
    
  2. 使用telnet 命令检查物理机是否可以连通虚拟机中对应的端口

    telnet 192.168.1.89 8888
    
  3. 检查虚拟机防火墙状态

    firewall-cmd --state
    
  4. 如果虚拟机防火墙开启,则检查虚拟机开放的端口是否包含8888

    firewall-cmd --zone=public --list-ports 
    

六、设置代理

​ 在发布到线上环境时,node服务器肯定也是要搭建到线上的服务器的(线上搭建和之前的方式差不多,就是看服务器是Linux还是Windows了,两者区别在于ffmpeg的安装,其他index.js是一样的),就会涉及到代理websokect的问题。

6.1 Vue项目添加代理配置
  • 添加代理配置
module.exports = {devServer: {proxy: {'/streamWs/**': {target: 'ws:http://localhost:8888',secure: false,changeOrigin: true,pathRewrite: {'^/streamWs': ''},ws: true}}}}
  • 修改调用地址
let player = flvjs.createPlayer({type: "flv",isLive: true,// url: `ws://localhost:8888/rtsp/${id++}/?url=${rtsp}`,url: `ws://${location.host}/streamWs/rtsp/${id++}/?url=${rtsp}`});
6.2 使用Nginx开启代理服务

参考文章: Centos 7 安装Nginx

修改/usr/local/nginx/conf 下nginx.conf配置文件

worker_processes  1;pid        /usr/local/nginx/logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream; sendfile        on;keepalive_timeout  65;map $http_upgrade $connection_upgrade {default upgrade;''  close;}server {listen       80;server_name  localhost;location / {proxy_pass http://127.0.0.1:8888;}location /streamWs/ {proxy_pass http://localhost:8888/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

执行命令

nginx -s reload

七、验证

7.1 启动物理机Easy Darwin 推流服务

参考文章:笔记本摄像头模拟监控推送RTSP流

7.2 使用ffmpeg将笔记本摄像转成rtsp视频流

参考文章:笔记本摄像头模拟监控推送RTSP流

7.3 将EasyDarWin推流列表中源地址复制到播放地址数据框中,点击播放

参考文章:笔记本摄像头模拟监控推送RTSP流

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

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

相关文章

工业级安卓PDA超高频读写器手持掌上电脑,RFID电子标签读写器

掌上电脑,又称为PDA。工业级PDA的特点就是坚固,耐用,可以用在很多环境比较恶劣的地方。 随着技术的不断发展,加快了数字化发展趋势,RFID技术就是RFID射频识别及技术,作为一种新兴的非接触式的自动识别技术&…

python处理目录下文本文件去除空格和空行

一:实现思路: 要想实现去除某个目录下所有txt文件的空格,需要循环遍历一个目录下的所有文件, 获取文件的每行数据去除空格以后,重新保存数据到当前当前文件中。 处理空格,我们使用正则,这样可以去除字符串…

Java并查集设计以及路径压缩实现

Java全能学习面试指南:https://javaxiaobear.cn 并查集是一种树型的数据结构 ,并查集可以高效地进行如下操作: 查询元素p和元素q是否属于同一组合并元素p和元素q所在的组 1、并查集的结构 并查集也是一种树型结构,但这棵树跟我们之…

C++面试八股--inline函数

1.inline 内联函数 1.1 特征 相当于把内联函数里面的内容写在调用内联函数处;相当于不用执行进入函数的步骤,直接执行函数体;相当于宏,却比宏多了类型检查,真正具有函数特性;编译器一般不内联包含循环、递归…

uniapp 如何使用echarts 以及解决tooltip自定义不生效问题

使用的是echarts-for-wx插件&#xff1b; 正常写法案例&#xff1a;给tooltip数值加个% <template><view><uni-ec-canvas class"uni-ec-canvas"id"uni-ec-canvas"ref"canvas"canvas-id"uni-ec-canvas":ec"ec&quo…

【数据库】sql优化有哪些?从query层面和数据库层面分析

目录 归纳sql本身的优化数据库层面的优化 归纳 这类型问题可以称为&#xff1a;Query Optimization&#xff0c;从清华AI4DB的paper list中&#xff0c;该类问题大致可以分为&#xff1a; Query RewriterCardinality EstimationCost EstimationPlan Optimization 从中文的角…

JSP使用websocket

jsp增加websocket $(function(){registerWebsocket(); });var ws; function registerWebsocket() {// 注册路径 加上自己的用户名ws new WebSocket("ws://127.0.0.1:8081/client/notify/test")//连接成功建立的回调方法ws.onopen function () {ws.send("客户…

SkipList 的索引过程,能否越两级搜索

“SkipList 的索引过程&#xff0c;能否越两级搜索&#xff1f;” 昨天&#xff0c;一个工作 7 年的粉丝&#xff0c;去某外包公司面试&#xff0c;被问到这个问题不知道该怎么回答。 今天正好有空&#xff0c;给大家分享一下这个问题的回答思路。 对了&#xff0c;这个问题…

ZooKeeper 实战(四) Curator Watch事件监听

文章目录 ZooKeeper 实战(四) Curator Watch事件监听0.前言1.Watch 事件监听概念2.NodeCache2.1.全参构造器参数2.2.代码DEMO2.3.日志输出 3.PathChildrenCache3.1.全参构造器参数3.2.子节点监听时间类型3.2.代码DEMO 4.TreeCache4.1.构造器参数4.2.代码DEMO4.3.日志输出 ZooKe…

Flink(十二)【容错机制】

前言 最近已经放假了&#xff0c;但是一直在忙一个很重要的自己的一个项目&#xff0c;用 JavaFX 和一个大数据组件联合开发一个功能&#xff0c;也算不枉我学了一次 JavaFX&#xff0c;收获很大&#xff0c;JavaFX 它作为一个 GUI 开发语言&#xff0c;本质还是 Java&#xff…

MSF流量加密

1、背景介绍 在MSF中生成shell&#xff0c;并上线运行时。都是通过http https tcp等协议传输。虽然MSF本身会对流量进行加密&#xff0c;但MSF太出名以致于其加密特征容易被IPS&#xff0c;WAF等可以检测带有攻击的特征的设备拦截或记录。 2、生成 SSL 证书 openssl req -x50…

Python操作PPT:轻松创建、编辑和展示幻灯片

引言&#xff1a; 在现代办公环境中&#xff0c;演示文稿已经成为一种常见的沟通工具。然而&#xff0c;使用传统的PowerPoint软件创建和编辑幻灯片可能会耗费大量的时间和精力。幸运的是&#xff0c;Python作为一种功能强大的编程语言&#xff0c;提供了许多库和工具&#xff…

关于运维·关于数据库面试题

目录 一、数据库类型 二、数据库引擎 三、mysql数据库类型 四、mysql的约束添加 五、主从复制原理 六、主从方式有几种 七、mysql主从数据不一致的原因 八、mysql的优化 九、什么是事务的特征 十、数据库读写分离的好处 十一、怎样优化sql语句 十二、mysql的同步方…

二Dockerfile实战

Dockerfile实战 实战1&#xff1a;使用Dockerfile修改Nginx首页 创建一个Dockerfile&#xff0c;内容如下&#xff1a; FROM nginx RUN echo <h1>Spring Cloud与Docker微服务实战</h1> > /usr/share/nginx/html/index.html实战2&#xff1a;使用Dockerfile在…

谷粒商城-商品服务-品牌管理-阿里云云存储+JSR303数字校验+统一异常处理

阿里云云存储OSS 分布式系统上传文件 分布式系统上传文件 单体应用上传&#xff1a;上传文件到服务器&#xff0c;想获取文件时再向服务器发请求获取文件。 分布式系统上传&#xff1a; 因为有多台服务器&#xff0c;为防止负载均衡导致获取文件时没找到对应的服务器&#xf…

实用编程调试技巧

目录 一、调试的基本步骤 二、Debug和Release的介绍 三、Windows环境调试介绍 1.调试环境的准备 2.学会快捷键 最常用的几个快捷键&#xff1a; 断点应用举例&#xff1a; 3.调试的时候查看程序当前信息 &#xff08;1&#xff09…

GitHub注册新账号的操作流程(详细)

目录 第一步 进入官网&#xff0c;点击右上角的"Sign up" 第二步 输入email地址 第三步 设置密码 第四步 输入昵称 第五步 根据个人喜好决定要不要接收GitHub的邮件推送。然后回答他们的验证问题 第六步 输入验证码 我在注册github账号时遇到过一些阻碍&#x…

软件测试|教你使用Python绘制正多边形

简介 绘制正多边形是Python图形编程的基本任务之一。在本文中&#xff0c;我将为你提供一个使用Python绘制正多边形的详细教程&#xff0c;并提供一个示例代码。我们将使用Python的Turtle库来进行绘制。 步骤1&#xff1a;导入Turtle库 我们需要先安装好Python环境&#xff…

Shiro框架:Shiro内置过滤器源码解析

目录 1. 常见项目中过滤器配置 2.Url访问控制配置解析为内置过滤器 2.1 DefaultFilterChainManager构造并注册内置过滤器 2.2 构造过滤器链 3. Shiro内置过滤器解析 3.1 内置过滤器概览 3.2 公共继承类解析 3.2.1 顶层Filter接口 3.2.2 AbstractFilter 3.2.3 Nameab…

二十几种未授权访问漏洞合集

未授权访问漏洞是一个在企业内部非常常见的问题&#xff0c;这种问题通常都是由于安全配置不当、认证页面存在缺陷&#xff0c;或者压根就没有认证导致的。当某企业对外的服务端口、功能无限制开放&#xff0c;并且对用户的访问没有做任何限制的时候&#xff0c;可能会泄露出某…