Vue整合Rtmp流实现无Flash播放[hls篇]

news/2024/11/13 3:54:25/

小白心路历程篇,如有错误欢迎指出,感谢各位大佬


本篇包括以下内容:

①采用nginx搭建流媒体服务器,利用ffmpeg工具实现推流和转码工作。

②使用vue+原生hls.js来实现无flash播放m3u8直播流

预备知识:

linux(操作系统基本命令)

nginx(配置参数,基础语法)

docker(利用docker搭建基于rtmp模块的nginx容器)

ffmpeg(一款功能强大的视频处理工具,可以推流,转码,拉流…)

vue基础

实现效果:

vue播放一个m3u8的直播流

搭建流程步骤:

1. 提供一个hls直播流(即http://xxx.m3u8此类格式)

获取方式:

①可采用网上一些现成的hls测试网址(此方式可以跳过下面环境搭建环节,直接进入vue页面测试即可)

②可自行搭建本地化的流媒体服务器,并用ffmpeg转码成hls直播流

2. 在vue中通过引入hls.js,并编写相应代码实现直播流播放

以下为具体实现细节:

一、环境搭建
1.1. 服务端采用nginx+ffmpeg搭建
使用docker构建基于rtmp模块nginx容器
docker镜像名称:alfg/nginx-rtmp
tip:该容器内对应的的配置文件所在位置(可以根据dockerfile查获)
容器内html文件夹所在位置:/opt/nginx/html
容器内logs日志文件夹所在位置:/opt/nginx/logs
容器内nginx配置文件夹所在位置:/opt/nginx/nginx.conf
docker 启动容器参数配置如下:
docker run --name nginx-rtmp -d -p 80:80 \
-v /docker/nginx-rtmp/conf/nginx.conf:/opt/nginx/nginx.conf:ro \
-v /docker/nginx-rtmp/html:/opt/nginx/html \
alfg/nginx-rtmp

         若启动后查看容器状态为exited,启动失败,可通过以下docker命令查看失败的原因:

docker logs -f 容器id

         nginx中rtmp服务相关配置:

rtmp {#开启一个rtmp应用服务server {listen 1935;chunk_size 4096; #默认流切片大小# create an application with rtmpapplication live {live on;record off;hls on;hls_path /opt/nginx/html/hls;hls_fragment 2s;#在接收到推流时,自动进行流格式转换并推送到本地的hls中,具体参数可以参考ffmpeg官方参数手册#exec ffmpeg -i rtmp://localhost/live/$name -threads 1 -c:v libx264 -profile:v baseline -b:v 350K -s 640x360 -f flv -c:a aac -ac 1 -strict -2 -b:a 56k rtmp://localhost/live360p/$name;#在启动nginx时就执行以下ffmpeg命令 将一个在线的rtmp转成本地的hls流(测试使用,替换成可使用的rtmp地址即可)exec_static ffmpeg -i rtmp://xxxxx.hd -c copy -f flv rtmp://localhost/hls360p/bk;}application hls360p {live on;hls on;#hls流保存位置,将该目录映射到宿主主机方便查看hls_path /opt/nginx/html/hls2;hls_fragment 2s;}}
}http {access_log /dev/stdout combined;ssl_ciphers         HIGH:!aNULL:!MD5;ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;ssl_session_cache   shared:SSL:10m;ssl_session_timeout 10m;server {listen 80;location /hls {types {application/vnd.apple.mpegurl m3u8;video/mp2t ts;}#hls的访问实际路径,例如访问http://localhost/hls/${name}.m3u8 则会访问对应目录下的m3u8文件alias /opt/nginx/html/hls2;expires -1;add_header Cache-Control no-cache;#设置允许跨域访问add_header Access-Control-Allow-Origin *;}}
}

踩坑记录:如果是在window操作下的nginx-rtmp模块,则配置中的exec_static指令是不生效的。可通过安装ffmpeg然后以命令行的形式实现推流。

二、客户端实现
采用vue+原生hls实现无flash播放m3u8
在html中引入hls.js,注意,是在html页面中直接全局引入
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>

 

在hls.vue中采用video+原生hls实现监控播放
<template><div id="hls"><video id="video" muted></video></div>
</template>
<script>
export default {name: 'hls-video',components: {},data() {return{}},methods: {//初始化video  initVideo () {let video = document.getElementById('video')if(Hls.isSupported()) {let hls = new Hls()//该hls地址为nginx配置中的地址hls.loadSource('http://172.16.1.72/hls/bk.m3u8')hls.attachMedia(video)hls.on(Hls.Events.MANIFEST_PARSED,()=>{video.play()});}else if (video.canPlayType('application/vnd.apple.mpegurl')) {video.src = 'http://172.16.1.72/hls/bk.m3u8'video.addEventListener('loadedmetadata',function() {video.play()})}}},created() {},mounted() {this.initVideo()},computed: {},watch: {}
}
</script>
<style scoped>
</style>

 

剩下注册路由访问即可。
该方式好处是,原生,简单,一个video标签即可。后续可自行进行vue组件二次封装。
三、思路梳理
3.1. 步骤
①使用ffmpeg进行推流和格式转换,使用nginx做流媒体服务器
②流媒体服务器通过映射路径实现转换后的视频流访问

3.2. 网上还有一种则是采用后端websocket+ffmpeg+flv.js(B站开源的视频直播框架)的解决方案。道理也是相通的,利用ffmpeg进行转码实现无flash播放。

2020年 chrome已经默认屏蔽flash播放了


http://www.ppmy.cn/news/637696.html

相关文章

网页通过Flash播放视频

众所周知要想在网页上播放视频有很多种方式,比如通过H5里面的Video标签,选择对应的参数,可以帮你自动加很多功能,比如暂停,播放,快进快退,调节音量,全屏播放,下载等等.但是这种方式也有很多缺点,就是只支持H.264编码格式的mp4视频文件,导致其他格式的视频要想播放还需转码.而且…

网页中播放Flash

作者 佚名 文章来源 互联网 地址 http://www.eqing.com.cn/Article/Print.asp?ArticleID1543介绍 我们要在网页中正常显示flash内容&#xff0c;那么页面中必须要有指定flash路径的标签。也就是OBJECT和EMBED标签。OBJECT标签是用于windows平台的IE浏览器的&#xff0c;而…

网页播放Flash视频尝试的三种方式

本身不是写HTML代码的&#xff0c;但老板突然让解决播放器适配所有浏览器的问题&#xff0c;过程有点难受。 播放视频最开始是使用H5的video标签播放mp4视频&#xff0c;但是不支持IE 9以下的浏览器&#xff0c;找到的解决方案是html5media&#xff0c;但是在不支持video标签的…

SpringBoot + Vue前后端分离项目实战 || 五:用户管理功能后续

系列文章&#xff1a; SpringBoot Vue前后端分离项目实战 || 一&#xff1a;Vue前端设计 SpringBoot Vue前后端分离项目实战 || 二&#xff1a;Spring Boot后端与数据库连接 SpringBoot Vue前后端分离项目实战 || 三&#xff1a;Spring Boot后端与Vue前端连接 SpringBoot V…

呼叫中心语音外呼营销系统软件成企业首选

网络电话&#xff0c;云呼&#xff0c;电销&#xff0c;博主从事多年智能机器人&#xff0c;外呼中心技术开发。有问题找博主。电信诈骗是今年工信部讨论的热词&#xff0c;为了更好的规范通讯业务和市场&#xff0c;相继出台了许多规定&#xff0c;并做了严格规定与限制。为此…

2.IT-解决方案-2-FAX

一. 目的: 1. 企业与企业,企业与个人,之间的沟通 2. 使用分机号 A. 根据企业架构-获取-企业联络表 B. 根据企业架构-在传真服务器中按部门来建立相应的部门 C. 根据企业架构-为各部编号,比如总经理 11 财务 12 D. 根据企业架构-为部门下面员工,首先固定传真机号码,如总经理 111…

ubuntu中实现tif格式转换为pdf或者其它各种格式的方法

在做一个OA系统项目中&#xff0c;开发到传真模块&#xff0c;传真数据是通过aofax收发的&#xff0c;现在要把收到的tif文档显示到浏览器上。最好的办法是把tif文档转换成pdf的格式。 步骤如下&#xff1a; 1、运行以下五条代码 sudo aptitude update sudo aptitude insta…

Sqlserver2005 Sqlcmd查看数据库/表/字段的命令

分类&#xff1a; Other 2011-05-09 17:57 2931人阅读 评论(1) 收藏 举报 sqlserver 数据库 join server 工具 go Sqlcmd是sqlserver自带的命令行工具&#xff0c;可以在不打开企业管理器的时候访问本地或者远程的数据库&#xff0c;对数据库进行管理。 Sqlcmd连接数据库&a…