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

article/2025/9/19 15:36:23

场景

Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流:

Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流_霸道流氓气质的博客-CSDN博客

上面讲了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是一个随时可用的零依赖服务器和代理,

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

所支持的协议格式

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

vue中进行视频流播放。

HLS协议

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

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

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

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

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

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

实现

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

Releases · aler9/rtsp-simple-server · GitHub

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

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

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

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

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

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

可参考如下

Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流:

Windows上搭建Nginx RTMP服务器并使用FFmpeg实现本地视频推流_win nginx-rtmp最新版_霸道流氓气质的博客-CSDN博客

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

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

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

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

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

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

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

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

完整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效果

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 streamfetch('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 streamfetch('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>​

运行本地示例代码

4、Vue中播放hls/m3u8视频

Vue+Video.js播放m3u8视频流(海康威视摄像头+RTMP服务+FFmpeg):

Vue+Video.js播放m3u8视频流(海康威视摄像头+RTMP服务+FFmpeg)_video.js 海康_霸道流氓气质的博客-CSDN博客

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

还是需要安装依赖

npm install --save video.jsnpm install --save videojs-contrib-hls

完整页面代码

​
<template><div class="component-upload-image"><videoid="my-video"class="video-js vjs-default-skin"controlspreload="auto"width="500px"><sourcesrc="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>​

运行效果

5、缺点

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

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


http://chatgpt.dhexx.cn/article/a04pFH9k.shtml

相关文章

直播平台流媒体服务器搭建(Linux+Nginx+RTMP)

写在前面&#xff1a; 实践出真知学习编程最好的语言不是PHP&#xff0c;是English 近年来各大视频直播平台兴起&#xff0c;直播技术也愈发成熟&#xff0c;作为一个程序员&#xff0c;秉着“折腾”精神自己搭建了一个直播用的流媒体服务器&#xff0c;现在来和大家分享一下搭…

个人流媒体服务搭建

简介 主要是个人的流媒体服务器的创建的方式分享 Centos7自建基于HLS的私人直播服务器 相关资源下载 链接&#xff1a;https://pan.baidu.com/s/1zhWFpFRy2v0_lyjA0-AfAg 提取码&#xff1a;yyds 入门操作 实现方法基于nginx和nginx的一个rtmp模块。因为epel源和nginx官…

搭建RTSP流媒体服务器的三种方式

主要用于测试目的&#xff0c;系统是windows&#xff0c;使用的是docker desktop 3.5.1 1. rtsp-simple-server 官网&#xff1a;https://github.com/aler9/rtsp-simple-server &#xff08;1&#xff09;下载解压缩 Centos7下载压缩包&#xff0c;然后启动rtsp服务器 tar zx…

一分钟内搭建高性能免费流媒体服务器---导航

本博文件是为了方便大家寻找资源更加方便而写&#xff0c; 这样大家可以以此为入口&#xff0c;看到所有关于流媒体服务的相关内容&#xff0c;所有资源都附在了相关博文中。 在服务器系列博文中有服务器的知识群二维码&#xff0c;大家可以通过二维码加群讨论。 流媒体服务器…

流媒体之从零实现搭建简单流媒体服务器,推流,拉流播放全景视频

一、直播与点播 直播&#xff1a;在我的理解中是实时录制的内容&#xff0c;类似各个晚会的实时直播过程&#xff0c;在现场采集图像的同时传输影像到网络上。点播&#xff1a;是提前录制完成的内容&#xff0c;类似某些直播平台上根据观众的需求播放某些电影或经典电视剧。终…

阿里云搭建流媒体服务器

最近不少人问是否能够将云视睿博流媒体服务器NTV Media Server G3搭建在阿里云服务器上&#xff0c;答案是肯定的&#xff0c;而且我们大部分客户都是这样用的&#xff0c;利用流媒体服务器的视频处理和播出能力&#xff0c;以及阿里云的基础计算能力和可扩展性&#xff0c;构建…

流媒体视频服务:快速搭建一个简单的流媒体视频服务(一)

快速搭建一个简单的流媒体视频服务 前言系统组成RTMP协议简介Red5 概述Red5 服务器搭建 前言 最近自己在研究有关于流媒体播放的技术&#xff0c;网上资料甚少。出于开源精神以及在查阅资料得到各位大佬的帮助&#xff0c;故将自己的心得写下记录&#xff0c;便于分享以及日后…

用VLC搭建简单的流媒体服务器

在做视频传输客户端开发的时候&#xff0c;经常需要用到流媒体服务&#xff0c;VLC有着非常强大的流媒体处理能力&#xff0c;同时它也可以搭建流媒体服务器。这里介绍一种使用图形化界面搭建RTSP流媒体服务的应用。 &#xff08;1&#xff09;打开一个本地的流文件 &#xff…

Linux下视频流媒体服务器搭建详解

目标用于搭建内网流媒体服务器支持视频的点播。 背景 用于支持培训网站中视频点拨功能&#xff0c;在培训网站总体方案中需要加入流媒体服务器&#xff0c;用于存储和传输视频资源。 相关概念 流媒体流媒体&#xff08;Streaming Media&#xff09;是一种新兴的网络传输技术…

流媒体服务器搭建亲测有效(srs)

流媒体服务器搭建流程 第一步 去官网下载srs的源码文件官网地址&#xff1a;[https://github.com/ossrs/srs#usage] 说明&#xff1a;建议下载4.0版本&#xff0c;3.0的需要flash的支持。目前谷歌浏览器已经停止了flash的使用。 第二步 按照官网的步骤进行操作 1.进行解压文…

搭建自己的流媒体服务器-(1)服务器搭建篇

搭建自己的流媒体服务器&#xff0d;(1)服务器搭建篇 http://download.csdn.net/download/katdriver/3272133 http://blog.csdn.net/haolipengzhanshen/article/details/50810066 标签&#xff1a; ios流媒体服务器服务器 2016-02-19 15:09 121人阅读 评论(0) 收藏 举报 分…

监控流媒体服务器的搭建和使用

需求的提出 海康、大华、宇视等视频监控系统&#xff0c;都有自己的流媒体服务器平台&#xff0c;为什么要还需要通用的流媒体服务器产品呢&#xff1f; 这个问题可以从几个方面回答&#xff1a;1&#xff09;经济性&#xff1a; 传统监控厂商的流媒体服务器&#xff0c;由于主…

学着搭建流媒体服务器

操作系统&#xff1a;NAME"openEuler"&#xff0c;架构&#xff1a;aarch64&#xff0c;CPU 运行模式&#xff1a;64-bit 目前有多个开发源代码可以搭建流媒体服务&#xff0c;但要先依赖gcc和cmake&#xff0c;所以首先安装gcc和cmake&#xff0c;查了一通资料&…

js逆向工具-初学AST解混淆

目录 一、AST简单了解二、babel环境安装三、快速入门例子1、入门例子讲解&#xff1a;修改变量值2、入门案例代码&#xff1a;修改变量值 四、实际案例1-ob混淆之ast还原1、数组 移位自执行函数 解密字符串函数 还原2、定义的对象Object有规律的key和value 还原3、while swi…

推荐.Net、C# 逆向反编译四大工具利器

转&#xff1a;https://blog.csdn.net/kongwei521/article/details/54927689 在项目开发过程中&#xff0c;估计也有人和我遇到过同样的经历&#xff1a;运行环境出现了重大Bug亟需解决、或者由于电脑挂了、旧代码覆盖新代码&#xff0c;而在这种情况下&#xff0c;我们不能直接…

某科技js逆向

分析 地址->https://qimingp*.cn/fino*a/project/ 捕获ajax请求&#xff0c;发现返回的数据是加密的&#xff0c;如下图&#xff1a; 打开搜索&#xff0c;定位如下&#xff1a; 经过查找&#xff0c;定位到11058行&#xff0c;如下&#xff1a; 分析代码&#xff0c;发现首…

BUUCTF 逆向工程(reverse)之内涵的软件

用IDA32位打开 一看到这个就是知道这里是获取flag的关键&#xff08;因为花括号{}&#xff09;。一开始以为是用了某种加密方式需要转换一下。结果它显示的&#xff1a;{49d3c93df25caad81232130f3d2ebfad}这部分就是flag。 所以这题的flag为&#xff1a;flag{49d3c93df25caa…

010Editor逆向分析

主要内容&#xff1a; 010Editor介绍 16进制编辑器&#xff1a;16进制修改、文本修改、模板解析各种文件格式、对比文件 010暴力破解分析 1、找到注册的窗口 2、测试注册窗口的反应 3、根据反应做出下一步分析 猜测API&#xff0c;API下断点动态调试 敏感字符串&#xff0c;程序…

Web前端——CSS伪类和伪元素

CSS伪类&#xff1a; 1.伪类的概念&#xff1a; 可以理解为描述元素的某种状态&#xff0c;用于当已有元素处于的某个状态时&#xff0c;为其添加对应的样式&#xff0c;这个状态是根据用户行为而动态变化的。 2.伪类的语法&#xff1a; 标签:伪类{设置的样式&#xff0c;伪类…

CSS伪类

CSS中伪选择器有两种分别是伪元素选择器和伪类选择器。为了向后续版本兼容&#xff0c;伪元素选择器常用"::"开头&#xff0c;而伪类选择器用“:”开头。本篇主要讲解以下伪类选择器&#xff1a; :first-child:last-childonly-childonly-of-type:nth-child(n)nth-la…