首页 > 其他分享 >rtsp视频网页播放

rtsp视频网页播放

时间:2024-01-17 13:33:07浏览次数:30  
标签:网页 ffmpeg stream flvPlayer rtsp console const 播放

注意:目前都在windows上使用,服务器安装部署多多少少有些问题。

1、WebRtcStreamer

github:https://github.com/mpromonet/webrtc-streamer/releases 但是经常打不开 ,如果有需要私信我,因为太忙了没时间放网盘,见谅

里面有windows版也有linux版的

在本地使用,进入exe目录

 启动,默认是8000

 打开测试

 默认是index.html,我们可以再html里面新建一个test.html修改一下

test.html

<html>
  <head>
    <link rel="stylesheet" type="text/css" href="styles.css" />
    <script src="libs/adapter.min.js"></script>
    <script src="webrtcconfig.js"></script>
    <script src="webrtcstreamer.js"></script>
    <script>
      let options = webrtcConfig.options;
      let codec = webrtcConfig.codec;
      console.log(codec);
      window.onload = function () {
        this.webRtcServer = new WebRtcStreamer("video", webrtcConfig.url);
        webRtcServer.connect(
          "rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream",
          "",
          options,
          undefined,
          codec
        );
      };
      window.onbeforeunload = function () {
        this.webRtcServer.disconnect();
      };
    </script>
  </head>
  <body>
    <video id="video" muted playsinline controls></video>
    <!-- <iframe src="http://127.0.0.1:8000/webrtcstreamer.html?video=rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream"></iframe> -->
  </body>
</html>

其中我们测试的rtsp是 rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream

如果不知道网页上的rtsp是否可用,可以下载vlc-3.0.20-win64 播放器打开网络串流测试

 可以播放即能使用。

打开test页面, 播放成功。

 这个使用起来还是比较简单,但是linux服务器安装比较麻烦,目前还在实践中。

2、node websockt+ffmpeg转码成flv 

node服务端调用ffmpeg转码然后前端使用

服务端

serve.js

const WebSocket = require('ws')
const webSocketStream = require('websocket-stream/stream')
// const ffmpeg = require('fluent-ffmpeg')
const ffmpegInstaller = require('@ffmpeg-installer/ffmpeg');
const ffmpeg = require('fluent-ffmpeg');
ffmpeg.setFfmpegPath(ffmpegInstaller.path);
// 建立WebSocket服务
const wss = new WebSocket.Server({ port: 8888, perMessageDeflate: false })

// 监听连接
wss.on('connection', handleConnection)

// 连接时触发事件
function handleConnection (ws, req) {
  // 获取前端请求的流地址(前端websocket连接时后面带上流地址)
  const url = req.url.slice(1)
  // 传入连接的ws客户端 实例化一个流
  const stream = webSocketStream(ws, { binary: true })
  // 通过ffmpeg命令 对实时流进行格式转换 输出flv格式
  const ffmpegCommand = ffmpeg(url)
    .addInputOption('-analyzeduration', '100000', '-max_delay', '1000000')
    .on('start', function () { console.log('Stream started.') })
    .on('codecData', function () { console.log('Stream codecData.') })
    .on('error', function (err) {
      console.log('An error occured: ', err.message)
      stream.end()
    })
    .on('end', function () {
      console.log('Stream end!')
      stream.end()
    })
    .outputFormat('flv').videoCodec('copy')
    // .outputFormat('flv').videoCodec('copy').noAudio() // 取消音频输出

  stream.on('close', function () {
    ffmpegCommand.kill('SIGKILL')
  })

  try {
    // 执行命令 传输到实例流中返回给客户端
    ffmpegCommand.pipe(stream)
  } catch (error) {
    console.log(error)
  }
}

创建一个package.json

{
  "name": "rtsp-vue-server",
  "version": "1.0.0",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "@ffmpeg-installer/ffmpeg": "^1.1.0",
    "express-ws": "^5.0.2",
    "fluent-ffmpeg": "^2.1.2",
    "node-media-server": "^2.6.2",
    "node-rtsp-stream": "^0.0.9",
    "websocket-stream": "^5.5.2"
  }
}

安装完必须的包后可以通过npm start启动。

 启动完成。

然后下载一个windows版本ffmpeg进行转码 

ffmpeg-N-103197-gbff7d662d7-win64-gpl   官网:https://www.ffmpeg.org/download.html#build-windows

解压完成后通过环境变量加入path,否则会找不到

 测试 ffmpeg -v

 然后前端使用

npm install flv.js --save
需要安装flv
import flvjs from 'flv.js';

<video
          muted="muted"
          controls
          width="600"
          height="600"
          style="width:100%; height:100%"
          ref="video"></video>
 
url: 'rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream',
createVideo() { if (flvjs.isSupported()) { const videoElement = this.$refs.video; this.flvPlayer = flvjs.createPlayer( { type: "flv", // isLive: false, // hasAudio: false, url: "ws://localhost:8888/" + this.url, }, { cors: true, // 是否跨域 // enableWorker: true, // 是否多线程工作 enableStashBuffer: false, // 是否启用缓存 // stashInitialSize: 128, // 缓存大小(kb) 默认384kb autoCleanupSourceBuffer: true, // 是否自动清理缓存 fixAudioTimestampGap: false, //false才会音视频同步 } ); this.flvPlayer.attachMediaElement(videoElement); this.flvPlayer.load(); this.flvPlayer.play(); // 报错重连 this.flvPlayer.on(flvjs.Events.ERROR, (errType, errDetail) => { console.log("errorType:", errType); console.log("errorDetail:", errDetail); this.play(); }); } }, // 销毁video destoryVideo() { if (this.flvPlayer) { this.flvPlayer.pause(); this.flvPlayer.unload(); this.flvPlayer.detachMediaElement(); this.flvPlayer.destroy(); this.flvPlayer = null; } }, // 重播/播放 play() { this.destoryVideo(); this.createVideo(); },

加载片刻后即可播放

 目前也还在实践linux部署。

标签:网页,ffmpeg,stream,flvPlayer,rtsp,console,const,播放
From: https://www.cnblogs.com/shuangzikun/p/17969786/fengtao_rtsp

相关文章

  • 输入自己买的域名可以访问到自己github上的网页
    需求:在腾讯云上买了一个域名,现在想通过在浏览器中输入域名,能打开自己写的网页.步骤:1、在github上面新建一个仓库,必须公开的仓库,不能是私有的,把项目代码push进去。一定要仓库下面直接是文件,不要又包一层文件夹。这里我的页面内容在是a.html里面。 这里有个问题:我本来是想,直......
  • 采用rem网页自适应背景也自适应
    采用rem网页自适应背景也自适应,设置background-size 属性background-size 属性规定背景图像的尺寸div{background:url(img_flwr.gif);background-size:1rem1rem;background-repeat:no-repeat;}CSS语法background-size:length|percentage|cover|contain;属性......
  • chewie 视频播放器使用
    基本使用1import'package:flutter/material.dart';import'package:video_player/video_player.dart';import'package:chewie/chewie.dart';classVideoPlayerScreenextendsStatefulWidget{@override_VideoPlayerScreenStatecrea......
  • 记录--终于搞懂了网盘网页是怎么唤醒本地应用了
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助写在前面用百度网盘举例,可以通过页面打开本机的百度网盘软件,很多软件的网站页面都有这个功能。这个事情一直令我比较好奇,这次终于有空抽时间来研究研究了,本篇讲的是Windows的,mac的原理与之类似,Mac文章已发布:(Mac版......
  • 仿sina个人轻微博html静态网页模板
    一款最新的仿sina个人微博html静态网页模板(轻博客/轻微博/贴吧主页、qq社交空间主题),模板清新简洁、新颖,包含关注、粉丝、人气、个人资料、文章、视频等。比较适合类似爱装扮空间的女生,二次元动漫、插画绘画等内容的个人轻社交博客的模板主题。 模板主题特色:1......
  • Gstreamer Rtspsrc连接大华摄像头失败原因及解决
    先说解决办法sudoapt-getremovegstreamer1.0-plugins-ugly分析过程和原因输入命令gst-launch-1.0rtspsrclocation="rtsp/url"!fakesink终端输出如下SettingpipelinetoPAUSED...PipelineisliveanddoesnotneedPREROLL...Progress:(open)OpeningStre......
  • js爬取网页table数据
    result=""for(vari=2;i<=100;i++){varxpath='//*[@id="app"]/div/div[3]/div[1]/div[3]/div/div[2]/div/div[1]/div[1]/div/div/div/div/div/div/div[2]/table/tbody/tr['+i+']/td[4]/div[1]/span[1]/span/a......
  • 网页设计(六)表格与表格页面布局
    一、设计《TF43:前端的发展与未来》日程表《TF43:前端的发展与未来》日程表文字素材:前端是互联网技术的重要一环,自上世纪80年代万维网技术创立以来,Web成就了大量成功的商业公司,也诞生了诸多优秀的技术解决方案。因其标准性和开放性,前端技术社区非常活跃。前端技术虽然起步......
  • 蓝色时间轴个人博客网页模板代码
    看雪时间轴个人博客模板,女生唯美简洁个人博客静态页面模板,蓝色时间轴个人网页模板,下雪空间个人模板代码1、html页面代码<!doctypehtml><html><head><metacharset="gb2312"><title>看雪时间轴个人博客模板-bokequ.com</title><metaname="keywords"content="蓝色......
  • Python和RPA网页自动化-发送邮件
    以163邮箱为例,分别使用Python和RPA网页自动化发送邮件到指定邮箱其中2个方法都需要用到163邮箱授权码,开启IMAP/SMTP服务即可得到授权码(POP3/SMTP服务不用开启) 1、python代码如下importsmtplibfromemail.mime.textimportMIMETextfromemail.headerimportHeaderdef......