Nginx+ffmpeg实现Hls(m3u8)推流播放,不使用flash
文章目录
- 相关环境:
- 一、Nginx部署:
- 二、ffmepg部署
- 三、配置ffmpeg转发
- 四、写前端访问代码查看:
- 五、报错相关:
- 1、如果到启动时缺少了ffmpeg模块
- 六、写在最后:
任务需求:由于各个浏览器已经终止了适配Flash播放插件,故此监控视频从之前的Rtmp格式变为Hls(m3u8)格式
相关环境:
海康威视:
网页配置监控视频端口:80(可修改),需账号密码
流媒体传输监控视频端口:554(可修改)部署环境:
系统版本:CentOS7.5
Nginx版本:1.19.2
ffmpeg版本:2.2
IP:192.168.31.88
原参考链接
一、Nginx部署:
主要安装参考链接
1、编译安装nginx
# yum -y install pcre-devel openssl openssl-devel //安装依赖
# wget http://nginx.org/download/nginx-1.16.0.tar.gz //下载nginx包
# tar xf nginx-1.16.0.tar.gz && cd nginx-1.16.0
# ./configure --prefix=/application/nginx --with-http_ssl_module //编译安装nginx
# make && make install
2、修改nginx配置文件,添加如下内容并重新载入配置文件
# vim /application/nginx/conf/nginx.conf
user root;
worker_processes 1;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 20000;server_name localhost;location / {root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}location /hls {types{application/vnd.apple.mpegurl m3u8;video/mp2t ts;}root html;add_header Cache-Control no-cache;add_header Access-Control-Allow-Origin *;}
}
}
# /application/nginx/sbin/nginx -s reload //重新加载启动
二、ffmepg部署
ffmpeg命令参考这个文章
1、安装依赖
# yum install yasm -y
2、下载ffmpeg并安装
# git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
# cd ffmpeg //解压并进入目录
# ./configure --prefix=/usr/local/ffmpeg
# make
# make install
3、拷贝命令到/usr/bin //方便后面调用
# ls /usr/local/ffmpeg/ //查看安装目录生成的文件
bin include lib nohup.out share
# cp /usr/local/ffmpeg/bin/* /usr/bin/ //复制命令
三、配置ffmpeg转发
1、启用ffmpeg进行推流
# ffmpeg -re -rtsp_transport tcp -i rtsp://账号:密码@IP:端口/mpeg4/ch1/sub/av_stream.mp4 -acodec aac -strict experimental -ar 44100 -ac 2 -b:a 96k -r 25 -b:v 500k -s 480*480 -c `copy` -f hls -hls_time 2.0 -hls_list_size 0 -hls_wrap 15 /application/nginx/html/hls/test.m3u8-i //要处理视频文件的路径,此处地址是一个监控摄像头
-acodec //音频处理的格式
-strict experimental //更标准的严格性
-ar //设置音频采样率
-ac //设置通道为2
-b:a //要将输出文件的音频比特率设置为96 kbit/s
-r //要强制输出文件的帧频为24 fps
-b:v //要将输出文件的视频比特率设置为500 kbit/s。
-s //分辨率,传输的带宽根据分辨率来设定的,-b:v不能控制
-f //强制输出的视频格式
-hls_time //为切片的秒数
-hls_list_size //设置播放列表保存的最多条目,我这里设置为0会保存有所片信息,默认值为5
-hls_wrap //为切片的个数
Tips:-s参数在ffmpeg转发命令里面就算使用了-c copy参数
也不会生效!具体的分辨率是根据海康威视监控视频的分辨率来定的(主码流和子码流不相同)。主码流一般为1920x1080P[平均2M网速],子码流一般为1280x720P[平均1.2M网速],704x576[平均800Kb]。海康威视平台配置如下图,设置码率类型为定码率的话流量要稳定一些。
四、写前端访问代码查看:
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0"><link rel="shortcut icon" href="./static/logo.ico"><style type="text/css">html,body{margin:0px;height:100%;width:100%; display: flex; align-items: center}#video{width:1000px;height:600px;}</style><title>无BUG</title></head>
<body style="margin:0;overflow:hidden"><video id="video" muted></video><script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script><script>function initVideo () {let video = document.getElementById('video')if(Hls.isSupported()) {let hls = new Hls()//该hls地址为nginx配置中的地址hls.loadSource('http://192.168.31.88:20000/hls/test.m3u8')hls.attachMedia(video)hls.on(Hls.Events.MANIFEST_PARSED,()=>{video.play()});}else if (video.canPlayType('application/vnd.apple.mpegurl')) {video.src = 'http://192.168.31.88:20000/hls/test.m3u8'video.addEventListener('loadedmetadata',function() {video.play()})}}initVideo()</script>
</body></html>
- 可以在pc机浏览器上查看视频
- 后续出现跨域问题配置Nginx端口访问index.html即可
五、报错相关:
1、如果到启动时缺少了ffmpeg模块
参考链接
解决办法:
1、去其他服务器上有这个模块的拷贝过来libva.so.1 、libva-drm.so.1
2、去下载这个模块放在对应的位置
# ldd `which ffmpeg` //查看缺少的模块
六、写在最后:
1、主码流和子码流区分如下图:
2、各个直播协议的优缺点如下图:
3、如果是子码流访问的话,需要将子码流的分辨率
与码率上限
对应
4、-vf scale=320:240这个参数只能在将Rtsp转发为Rtmp的时候使用
5、参考链接以重要程度排序
一、二、三、四
6、其他链接:
①通过flv的方式转发
②vue的前端的配置
Nginx+ffmpeg实现Hls(m3u8)推流播放,不使用flash相关推荐
- 使用Nginx+FFMPEG搭建HLS直播转码服务器
FROM:http://blog.csdn.net/wutong_login/article/details/42292787 目的:使Nginx支持Rtmp协议推流,并支持hls分发功能及FFMPE ...
- 使用ffmpeg转码m3u8并播放及跨域问题
简介 随着客户的增加,mp4文件播放的弊端也日益凸显,主要集中在两个方面 当视频时长比较长的时候,mp4的关键帧元素往往很大,需要加载很长时间才能开始播放,网速不好的情况缓冲加载就要20多秒的时间,客 ...
- 使用ffmpeg转码m3u8并播放
简介 随着客户的增加,mp4文件播放的弊端也日益凸显,主要集中在两个方面 当视频时长比较长的时候,mp4的关键帧元素往往很大,需要加载很长时间才能开始播放,网速不好的情况缓冲加载就要20多秒的时间,客 ...
- nginx HLS m3u8播放视频跨域问题
采用HLS+m3u8方式播放视频,在播放的时候会报跨域问题.例如:https://www.***.com/crossdomain.xml找不到. 方法1:在跨域的网站根目录放crossdomain.x ...
- Nginx Rtmp Module - HLS切片和级联播放
#Nginx Rtmp Module - HLS切片和播放 1.名词解释 媒体片段文件(.ts): 媒体片段是由源站生成的,基于编码后的媒体源,并且是由一系列的 .ts 格式的文件组成,其中包含了你想 ...
- 使用ffmpeg搭建HLS直播系统
[时间:2018-04] [状态:Open] [关键词:流媒体,stream,HLS, ffmpeg,live,直播,点播, nginx, ssegment] 0 引言 本文作为HLS综述的后续文章. ...
- Windows上搭建rtsp-simple-server流媒体服务器实现rtsp、rtmp等推流以及转流、前端html与Vue中播放hls(m3u8)视频流
场景 Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流: Nginx-http-flv-module流媒体服务器搭建 ...
- [转]使用FFmpeg将视频推流到nginx,通过vlc拉流播放(通过命令的方式)
安装完FFmpeg,nginx,nginx-rtmp-module,vlc后就可以进行推流.拉流测试了.博主的nginx安装在VMWare的Ubuntu中(安装方法可以参考https://blog.c ...
- 推流拉流RMTP方案:Nginx+ffmpeg/obs+vlc/h5
RMTP方案:Nginx+ffmpeg/obs+vlc/h5 服务器安装 1.依赖 sudo apt-get update sudo apt-get install libpcre3 libpcre ...
最新文章
- 微信小程序多张图片和表单一起上传,验证表单及进度条的实现完整代码
- Symbols in Interllij IDEA
- leetcode 318. Maximum Product of Word Lengths | 318. 最大单词长度乘积
- php的内置函数strrpos_php strrpos 字符串查找函数内部源码实现
- pytorch-LSTM的输入和输出尺寸
- php json获取get请求,PHP简单的Curl的Get请求和Curl的Post请求和file_get_contents的Get请求获取接口JSON数据...
- 施一公点赞的高颜值蛋白质!
- Qt工作笔记-右键菜单造成内存泄漏等分析
- python 深度 视差 计算_2,Learn about Parallax(视差贴图)
- es2015(es6)基础知识整理(更新中...)
- 关于Java html table表格转excel
- MySQL KEY分区
- 更改Windows OEM信息
- Java程序员每天的工作都是做什么的?
- CGAL 计算几何库
- 圣诞Party将至!来来来,露一手用Python 抽奖
- 关于AWB的肤色问题
- 2017-12-12
- Ubuntu 14.04刷机时报错_BROM ERROR : S_UNDEFINED_ERROR (1001)
- 总结Python设置Excel单元格样式的一切,比官方文档还详细