实现摄像头的直播功能其实有许多方案,像是安装vlc插件、rtsp转rtmp然后使用videojs通过flash播放rtmp**(由于chrome已经不使用flash所以放弃使用videojs,并且videojs针对部分摄像机(比如:海康)不是很友好,作者大大也很久没有维护的原因,部分rtsp、rtmp流的视频直播是无法找到媒体的兼容源)** 以及hls .m3u8等方式
然而现今的浏览器对于vlc插件几乎都不再支持了,flash在2020年也将被chrome停止支持,而.m3u8的方案用来做直播的话似乎延迟很高
经过一番查找,最终决定使用B站(bilibili)开源的flvjs作为解决方案,其原理是后端用ffmpeg(服务器先安装ffmpeg)将rtsp视频流转换为flv,然后通过websocket传输flv视频流,然后前端通过websocket获取到视频流后,使用flvjs对视频流再一次处理并进行播放,这是一套无插件无flash免费的视频直播解决方案。

  1. vlc下载地址(https://www.stellarplayer.com/?chan=sem_02&bd_vid=11500080128163536149)

安装完后点击-媒体->打开网络串流->

如果不能进行观看直播,下面可以放弃了

  1. 安装ffmpeg(windows为实例)
    ffmpeg官网http://www.ffmpeg.org/download.html


    下载完后配置坏境变量

    FFMPEG_HOME
    D:\ffmpeg\ffmpeg-4.3.2-2021-02-27-essentials_build\bin

再去path指定变量%FFMPEG_HOME%

最后通过cmd窗口ffmpeg -version命令来查看是否安装成功

  1. 安装node(https://www.html.cn/qa/node-js/10701.html)

  2. 通过npm安装第三方依赖

 npm install express express-ws fluent-ffmpeg websocket-stream -S -D

服务器执行

  1. 编写index.js(这个js需要通过node启动,启动命令(直接在js的目录下):node index.js,并且此js作为websocket传输流)

其中setFfmpegPath为ffmpeg的安装路径,并且值为ffmpeg安装路径的bin/ffmpeg

var express =  require("express");
var expressWebSocket = require("express-ws");
var ffmpeg = require("fluent-ffmpeg");
ffmpeg.setFfmpegPath("D:/ffmpeg-20191031-7c872df-win64-static/ffmpeg-20191031-7c872df-win64-static/bin/ffmpeg");
var webSocketStream = require("websocket-stream/stream");
var WebSocket = require("websocket-stream");
var http = require("http");
function localServer() {let app = express();app.use(express.static(__dirname));expressWebSocket(app, null, {perMessageDeflate: true});app.ws("/rtsp/:id/", rtspRequestHandle)app.listen(8888);console.log("express listened")
}
function rtspRequestHandle(ws, req) {console.log("rtsp request handle");const stream = webSocketStream(ws, {binary: true,browserBufferTimeout: 1000000}, {browserBufferTimeout: 1000000});let url = req.query.url;console.log("rtsp url:", url);console.log("rtsp params:", req.params);try {ffmpeg(url).addInputOption("-rtsp_transport", "tcp", "-buffer_size", "102400")  // 这里可以添加一些 RTSP 优化的参数.on("start", function () {console.log(url, "Stream started.");}).on("codecData", function () {console.log(url, "Stream codecData.")// 摄像机在线处理}).on("error", function (err) {console.log(url, "An error occured: ", err.message);}).on("end", function () {console.log(url, "Stream end!");// 摄像机断线的处理}).outputFormat("flv").videoCodec("copy").noAudio().pipe(stream);} catch (error) {console.log(error);}
}
localServer();

前端vue

<template><div><video class="demo-video" ref="player" muted autoplay></video></div>
</template>
<script>
import flvjs from "flv.js";
export default {data () {return {id: "1",//这里填视频直播地址rtsp: "",player: null}},mounted () {if (flvjs.isSupported()) {let video = this.$refs.player;if (video) {this.player = flvjs.createPlayer({type: "flv",isLive: true,url: `ws://localhost:8888/rtsp/${this.id}/?url=${this.rtsp}`});this.player.attachMediaElement(video);try {this.player.load();this.player.play();} catch (error) {console.log(error);};}// if (video) {//     this.player = flvjs.createPlayer({//         type: "flv",//         url: `/static/test.flv`//     });//     this.player.attachMediaElement(video);//     try {//         this.player.load();//         this.player.play();//     } catch (error) {//         console.log(error);//     };// }}},beforeDestroy () {this.player.destory();}
}
</script>
<style>.demo-video {max-width: 880px; max-height: 660px;}
</style>

vue实现rtsp视频直播流相关推荐

  1. VLC插件在浏览器下(IE11)实现播放rtsp视频直播流

    VLC插件 最近项目用到需要在浏览器上播放视频流,尝试了很多种方式去解决,包括使用ffmpeg转码成rtmp播放,websocket结合webrtc等方式,但是效果都不是很好,而且存在一定的丢包和搭设 ...

  2. 【技能教学】如何通过FFMPEG编码推RTSP视频直播流到EasyDarwin开源平台时叠加时间水印?

    继之前一篇科普文<如何使用RTSP推流组件EasyPusher将MP4文件推到EasyDarwin开源平台>发布后,有开发者提出疑问:假如需要显示视频直播时间,如何在推送的时候可以自定义在 ...

  3. 如何通过FFMPEG编码推RTSP视频直播流到EasyDarwin开源平台时叠加时间水印?

    继之前一篇科普文<如何使用RTSP推流组件EasyPusher将MP4文件推到EasyDarwin开源平台>发布后,有开发者提出疑问:假如需要显示视频直播时间,如何在推送的时候可以自定义在 ...

  4. 网页视频直播流-ffmpeg-kurento

    视频直播流(摄像头之类的) ​ 一直以来没有做过页面播放直播的连接,都是播放一些用户上传的固定视频之类的,现有的video标签基本就能满足需求.但是遇到直播的连接的时候,需要一些插件进行解码辅助才能进 ...

  5. 【视频直播流】vue flv视频直播流 flv rtmp vue 直播视频流

    一.[rtmp视频流] 要点:主要是使用vue-video-player进行播放.要注意,这种播放方式需要flash播放器,遗憾的是很多浏览器已经不再支持flash播放器,如果是这样建议直接看下边第二 ...

  6. LiveNVR视频流媒体服务器软件支持配置通道视频宽、视频高、视频码率降低码流输出视频直播流

    支持通道配置支持配置备注标记通道的额外信息 1.通道编辑 2.显示高级配置 3.配置视频宽.视频高.视频码率 4.RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1.通道编辑 2.显示高级 ...

  7. Vue项目中播放直播流

    直播流播放协议 视频直播服务支出输出RTMP.FLV.HLS三种协议 阿里云视频直播 RTMP(Real Time Message Protocol:实时消息传输协议)延时低(1s~3s),TCP长连 ...

  8. rtsp协议的视频服务器,RTSP拉流协议视频平台EasyNVR能够接入多少路视频直播流?...

    EasyNVR视频平台能够进行多线程直播,新版更新的视频分屏功能也让多线程直播更加直观.经常有用户问我们最大能接入多少路视频流,其实这个是不固定的,具体还是要根据现场的网络和服务器来看.EasyNVR ...

  9. 幼儿园EasyNVR能力层安防监控平台调用视频直播流报404错误解决方案

    现在很多幼儿园都在使用安防摄像头做监控,并且会搭建专有的流媒体平台做安防直播或录像.我们的视频流媒体服务器EasyNVR也有过不少幼儿园监控直播的项目案例,我们不仅支持视频流的在线直播,也支持视频流的 ...

最新文章

  1. Jenkins Pipeline构建流水线发布
  2. VideoLAN、VLC 和 FFmpeg联合开发AV1 解码器 Dav1d
  3. 洛谷 - P4001 [ICPC-Beijing 2006]狼抓兔子(网格图最大流转换为对偶图最短路)
  4. win7安装mysql8.0创建用户_CentOS如何安装MySQL8.0、创建用户并授权的详细步骤
  5. Linux入门笔记——文件操作命令2
  6. 【HDU - 1220】Cube (组合数学,简单)
  7. map集合的常用方法和遍历
  8. 传新一轮估值200亿美金 小红书回应:以老股东增持为主
  9. 软工作业 评价输入法
  10. expect移植到powerPC平台的过程
  11. 阿里巴巴编码规范(java)考核
  12. 简单的 OpenGL 纹理贴图不起作用?
  13. 关于数字化营销,最通俗的讲解在这里
  14. 【参考文献】平滑肌细胞生长培养
  15. VMware esxi 阵列卡驱动下载
  16. html控制台 打印 consol,浏览器console.log()打印输出台不显示输出内容……
  17. 仿迅雷播放器教程 -- 基于VLC的MFC播放器 (6)
  18. Android ListView添加头部和尾部
  19. CSS中雪碧图CSS-Sprite的使用,解决图片闪烁问题
  20. 17252230140 王佳仪

热门文章

  1. JSD-2204-Java语言基础-运算符-分支结构-Day03
  2. 华为 鸿蒙 腾讯,高通都已支持华为鸿蒙,小米、OV却无动于衷
  3. 腾讯应用宝:首次上传演示视频需要去腾讯视频进行实名认证的操作
  4. 激光感知(二):激光雷达标定
  5. 【现代控制理论基础】一、线性系统的状态空间描述
  6. 拜日式精准引导词_拜日式引导词
  7. Opencv(C++)笔记--视频读取、视频属性查看、视频循环播放
  8. xwiki开发指南1-使用XWiki创建FAQ应用
  9. 学校计算机安全隐患排查情况报告,学校安全隐患排查情况报告
  10. 【基础篇】详解Zookeeper客户端Curator