首页 > 系统相关 >Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流

时间:2023-05-14 13:32:09浏览次数:59  
标签:m3u8 Windows rtsp hls js simple video


上面讲了Nginx-http-flv-module+flv.js进行流媒体服务器搭建和前端播放视频流的过程。

但是Nginx-http-flv-module对于Windows的支持以及推流格式的支持优先,所以下面推荐

rtsp-simple-server流媒体服务器的使用。

rtsp-simple-server

https://github.com/aler9/rtsp-simple-server

rtsp-simple-server / MediaMTX是一个随时可用的零依赖服务器和代理,

允许用户发布、读取和代理实时视频和音频流。

所支持的协议格式

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_html

 

这里的需求是搭建rtmp的流媒体服务器,并接收其他摄像头的推流,然后在前端html或者

vue中进行视频流播放。

HLS协议

HLS,Http Live Streaming 是由Apple公司定义的用于实时流传输的协议,基于HTTP协议实现,

传输内容主要包括两部分,一是M3U8描述文件,二是TS媒体文件。

1.m3u8文件是一种索引文件,用文本方式对媒体文件进行描述,由一系列标签组成。

2.m3u8文件用于解析对应的放在服务器上的视频网络地址,从而实现在线播放。

3、ts文件是传输流文件,是实际需要播放的内容,通常一个大的视频被分成众多小的ts实现分片。

注:


实现

1、这里是本机Windows电脑,下载zip压缩包到本地并解压

Releases · aler9/rtsp-simple-server · GitHub

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_ide_02

 

解压之后根据自己需要修改其yml配置文件

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_ide_03

 

这里只需要修改其rtmp服务的端口为11935,修改之后保存,双击rtsp-simple-server.exe启动

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_vue.js_04

 

启动成功之后会提示有哪些格式的视频流已经开启支持以及对应的端口。

如果启动后没有成功的页面或者修改的配置文件不对导致起不来,可以在exe所在的目录打开cmd,

然后将exe拖入cmd,回车即可看到错误输出

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_视频流_05

 

2、模拟推送视频流

模拟推送视频流可以参考官方使用FFmpeg的方式,或者上文中使用oob进行模拟的方式

这里使用编辑ffmpeg的脚本进行模拟推送rtmp的视频流,脚本内容为

ffmpeg.exe -re -i D:\WorkSpace\Other\FFmpegDemo\test\1.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:11935/hls/123_0
pause



模拟推流之后可以直接在浏览器中打开

http://127.0.0.1:8888/hls/123_0/

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_视频流_06

 

可以看到浏览器一直在请求.m3u8的地址,将这个地址复制出来

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_视频流_07

 

这个地址也可以在vlc中打开进行播放

http://127.0.0.1:8888/hls/123_0/stream.m3u8

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_vue.js_08

 

3、前端Html播放hls/m3u8视频

前面直接可以将hls的地址在浏览器中打开,并且按照官方文档,也可以直接使用iframe进行播放

<iframe src="http://rtsp-simple-server-ip:8888/mystream" scrolling="no"></iframe>

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_html_09

 

完整html示例代码

<!DOCTYPE html>
<html>

<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title>hls demo</title>
    <style>
        .mainContainer {
            display: block;
            width: 1024px;
            margin-left: auto;
            margin-right: auto;
        }
    </style>
</head>

<body>

<p class="mainContainer">
 <iframe src="http://127.0.0.1:8888/hls/123_0" scrolling="no"></iframe>
</p>


<script>

</script>

</body>

</html>

运行html效果

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_ide_10

html还可以使用hls播放m3u8视频

rtsp-simple-server/hls_index.html at main · aler9/rtsp-simple-server · GitHub

官方示例代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
html, body {
 margin: 0;
 padding: 0;
 height: 100%;
 overflow: hidden;
}
#video {
 width: 100%;
 height: 100%;
 background: black;
}
</style>
</head>
<body>

<video id="video" muted controls autoplay playsinline></video>

<script src=" href='https://cdn.jsdelivr.net/npm/hls.js@1.2.9">https://cdn.jsdelivr.net/npm/hls.js@1.2.9"></script>

<script>

const create = () => {
 const video = document.getElementById('video');

 // always prefer hls.js over native HLS.
 // this is because some Android versions support native HLS
 // but don't support fMP4s.
 if (Hls.isSupported()) {
  const hls = new Hls({
   maxLiveSyncPlaybackRate: 1.5,
  });

  hls.on(Hls.Events.ERROR, (evt, data) => {
   if (data.fatal) {
    hls.destroy();

    setTimeout(create, 2000);
   }
  });

  hls.loadSource('index.m3u8');
  hls.attachMedia(video);

  video.play();

 } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
  // since it's not possible to detect timeout errors in iOS,
  // wait for the playlist to be available before starting the stream
  fetch('stream.m3u8')
   .then(() => {
    video.src = 'index.m3u8';
    video.play();
   });
 }
};

window.addEventListener('DOMContentLoaded', create);

</script>

</body>
</html>

本地示例代码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
html, body {
 margin: 0;
 padding: 0;
 height: 100%;
 overflow: hidden;
}
#video {
 width: 100%;
 height: 100%;
 background: black;
}
</style>
</head>
<body>

<video id="video" muted controls autoplay playsinline></video>

<script src=" href='https://cdn.jsdelivr.net/npm/hls.js@1.2.9">https://cdn.jsdelivr.net/npm/hls.js@1.2.9"></script>

<script>

const create = () => {
 const video = document.getElementById('video');

 // always prefer hls.js over native HLS.
 // this is because some Android versions support native HLS
 // but don't support fMP4s.
 if (Hls.isSupported()) {
  const hls = new Hls({
   maxLiveSyncPlaybackRate: 1.5,
  });

  hls.on(Hls.Events.ERROR, (evt, data) => {
   if (data.fatal) {
    hls.destroy();

    setTimeout(create, 2000);
   }
  });

  hls.loadSource('http://127.0.0.1:8888/hls/123_0/stream.m3u8');
  hls.attachMedia(video);

  video.play();

 } else if (video.canPlayType('application/vnd.apple.mpegurl')) {
  // since it's not possible to detect timeout errors in iOS,
  // wait for the playlist to be available before starting the stream
  fetch('http://127.0.0.1:8888/hls/123_0/stream.m3u8')
   .then(() => {
    video.src = 'http://127.0.0.1:8888/hls/123_0/stream.m3u8';
    video.play();
   });
 }
};

window.addEventListener('DOMContentLoaded', create);

</script>

</body>
</html>

运行本地示例代码

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_html_11

 

4、Vue中播放hls/m3u8视频


前面记录过,这里只需要修改视频流地址即可。

还是需要安装依赖

npm install --save video.js

npm install --save videojs-contrib-hls

完整页面代码

<template>
  <div class="component-upload-image">
    <video
      id="my-video"
      class="video-js vjs-default-skin"
      controls
      preload="auto"
      width="500px"
    >
      <source
        src="http://127.0.0.1:8888/hls/123_0/stream.m3u8"
        type="application/x-mpegURL"
      />
    </video>
  </div>
</template>
<script>
import "video.js/dist/video-js.css";
import videojs from "video.js";
import "videojs-contrib-hls";

export default {
  components: {

  },
  name: "m3u8Play",
  data() {
    return {};
  },
  mounted() {
    let _that = this;
    setTimeout(() => {
      _that.getVideo();
    }, 6000);
  },
  methods: {
    getVideo() {
      videojs(
        "my-video",
        {
          bigPlayButton: false,
          textTrackDisplay: false,
          posterImage: true,
          errorDisplay: false,
          controlBar: true,
        },
        function () {
          this.play();
        }
      );
    },
  },
  watch: {},
};
</script>

<style scoped lang="scss">
</style>

运行效果

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_html_12

 

5、缺点

该种方式视频延迟较大,本地实测大概10秒左右。

优化延迟大问题可以参考官方Low-Latency variant的配置

Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流_vue.js_13

 

标签:m3u8,Windows,rtsp,hls,js,simple,video
From: https://blog.51cto.com/BADAOLIUMANGQZ/6274865

相关文章

  • windows删除此电脑主界面的文件夹
    修改注册表Win+r;regedit计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace删除框起来的部分......
  • Java:Linux/Windows/macOS安装JDK
    目录开发环境安装JDK生产环境安装JDKJava版本开发环境安装JDK可以通过oracle的官方下载地址,下载安装https://www.oracle.com/cn/java/technologies/downloads/https://www.oracle.com/cn/java/technologies/downloads/archive/生产环境安装JDK文档https://openjdk.org/install/#Ja......
  • windows11上安装PL-SQL Developer 15.0.3.2059
    注:连接的oracle服务端是oracle12c1.环境准备(1).下载oracle客户端下载以下版本均可:此处我下载的是instantclient-basic-nt-12.2.0.1.0.zip(2).下载PL-SQLDeveloper15.0.3.2059下载地址:https://www.jb51.net/softs/820654.html2.解压配置oracle客户端首先在磁盘上创建D......
  • windows 10安装docker
    win10安装docker,软件下载地址是:https://www.docker.com/products/docker-desktop/安装后报错了这个错误:DockerDesktoprequiresanewerWSLkernelversion.需要更新wsl更新包,下载地址是:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi打开Doc......
  • Windows7操作系统的安全与配置
    一:介绍Windows7是微软于2009年发布的,开始支持触控技术的Windows桌面操作系统,其内核版本号为NT6.1在Windows7中,集成了DirectX11和InternetExplorer8。DirectX11作为3D图形的接口,不仅支持未来的DX11硬件,还向下兼容当前的DirectX10和10.1硬件。DirectX11增加了新的计算Shader技术,可以......
  • Burp Suite Professional / Community 2023.5 (macOS, Linux, Windows) - Web 应用安
    BurpSuiteProfessional/Community2023.5(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:https://sysin.org/blog/burp-suite-pro-2023/,查看最新版。原创作品,转载请保留出处。作者......
  • SetWindowsHookEx - 设置钩子
    提示:如果要设置系统级钩子,钩子函数必须在DLL中.SetWindowsHookEx( idHook:Integer; {钩子类型} lpfn:TFNHookProc;{函数指针} hmod:HINST;   {包含钩子函数的模块(EXE、DLL)句柄;一般是HInstance;如果是当前线程这里可以是0} dwThreadId:DW......
  • Qt推流程序(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)可在网页和播放器远
    一、前言说明推流直播就是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号从手机端,电脑端,摄影机端打包传到服务器的过程。“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验比较糟糕。主流推送协议有RTMP、......
  • windows系统为硬件保留的内存如何解决?
    这个问题在win7、win10、win11上都存在,但win10很明显更多,操作系统里边win10幺蛾子最多。为硬件保留的内存,是系统自己确定的,大多数时候无法人工调节,少数情况msconfig能够调节。正常的保留数量几十M几百M,要是大于500M一般用户都不大高兴了。如果保留的内存容量正好是一根内存......
  • 浅谈Kafka2.8+在Windows下的搭建与使用
    前言:    周末空闲时间无意找到了一套个性化推荐的源码,整体项目运用了SSH,HDFS,Flume,Hive,Kafka,Spark,Scala等。运行时,本来通过spark计算业务埋点数据时,却发现本地没有Kafka。因为我一直也没使用过Kafka,所以也作为新人,浅谈以下Kafka的环境安装与分别在PHP,Scala中的使用。 对比:1......