基于Nginx+rtmp搭建支持hls协议的点播流媒体服务器(windows/Linux)
前言:公司最近因为客户端视频文件过大导致视频加载时间很长,让我将视频播放做成流媒体点播的形式,于是查阅了几十篇相关文章以及文档,最终将功能实现。可能是存在版本差异,绝大部分文章介绍的教程并不能成功实施,尤其是点播功能,所以我把我工作中验证成功的方案发出来,包括相应的资源包。
本文仅介绍基于HLS流的点播功能,直播功能可参考如下链接操作。
https://blog.csdn.net/caodongfang126/article/details/100984841
1.方案介绍
通过nginx-rtmp + ffmpeg实现rtsp流转hls流,可支持PC端/移动端的点播/直播,通过Native HLS Playback扩展插件或者VLC播放器实现视频播放功能。
2、部署环境
操作系统:windows/Linux
工具:nginx、nginx-rtmp-module、ffmpeg
百度云全套工具下载(包括配置):
windows:
链接:https://pan.baidu.com/s/1Dq5ZqwRpMZ9I5Y4aZHgQQA?pwd=8tkd
linux:
链接:https://pan.baidu.com/s/1TtY3OOlQwespHhFlZTtH_w?pwd=lghd
3、ffmpeg下载及安装
windows下安装:
https://github.com/BtbN/FFmpeg-Builds/releases/download/autobuild-2021-08-31-14-55/ffmpeg-n4.4-80-gbf87bdd3f6-win64-gpl-4.4.zip,下载并解压FFmpeg文件夹,配置环境变量:在“Path”变量原有变量值内容上加上d:\ffmpeg\bin,验证:ffmpeg -version 出现版本号则成功。
Linux下安装:
(1)下载最新源码包并解压
wget http://ffmpeg.org/releases/ffmpeg-4.1.tar.gz
tar zxvf ffmpeg-4.1.tar.gz
(2)安装ffmpeg
cd ffmpeg-4.1/
./configure
如出现报错:
![](/assets/blank.gif)
(3)安装yasm
yum install yasm
(4)继续安装ffmpeg
./configure
make
make install
(5)测试
ffmpeg -version
4、nginx及nginx-rtmp-module下载及安装
windows下安装:
到github上下载相应的安装包,https://github.com/illuspas/nginx-rtmp-win32,下载并解压nginx文件夹
Linux下安装:
(1) 到nginx官网上下载相应的安装包,https://nginx.org/en/download.html,上传至/usr/local/src,
或者使用命令下载
wget http://nginx.org/download/nginx-1.21.6.tar.gz
(2) 安装依赖库
yum install -y gcc-c++ zlib pcre openssl openssl-devel
(3) 下载 nginx-rtmp-module
到github上下载相应的安装包,https://github.com/arut/nginx-rtmp-module/archive/master.zip,上传至/usr/local/src,
或者使用命令下载
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
(4) 解压
tar -zxvf nginx-1.12.2.tar.gz
unzip nginx-rtmp-module-master.zip
(5) 配置编译
mkdir /uar/local/nginx
./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/nginx-rtmp-module-master/
make
make install
(6) 测试
cd /usr/local/nginx
nginx -v
5、nginx服务配置
hls协议点播功能配置:
要nginx服务支持hls协议点播功能,需要确认conf/mime.types和conf/nginx.conf两个配置文件。
conf/mime.type配置文件中需增加如下两行配置项(如果没有的话)
video/mp2t ts;
application/vnd.apple.mpegurl m3u8;
conf/nginx.conf配置文件中需要配置信息如下:
注意location /hls{}的配置项需要放到server {}里头,其中8090就是后续使用hls访问视频的http端口号。
#配置hls点播location /hls{types{application/vnd.apple.mpegurl m3u8;video/mp2t ts;}autoindex on;root html/vod; #点播视频文件(.ts;.m3u8)存放位置add_header Cache-Control no-cache;add_header 'Access-Control-Allow-Origin' '*' always;add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';add_header 'Access-Control-Allow-Headers' 'Range';#add_header Cache-Control no-cache;#add_header 'Access-Control-Allow-Origin' '*';#add_header 'Access-Control-Allow-Credentials' '*';#add_header 'Access-Control-Allow-Methods' 'GET, HEAD, OPTIONS';#add_header 'Access-Control-Expose-Headers' 'Server,range,Content-Length,Content-Range';}
6、重启nginx
Windows
重启nginx: 先执行stop.bat(如果已启动), 再执行nginx.exe
打开logs文件夹中的error.log文件, 如果最后只显示signal process started, 则启动成功
![](/assets/blank.gif)
Linux
重启nginx:
如已配置环境变量,直接执行
nginx -s reload
未配置则
cd /usr/local/nginx/sbin
./nginx -s reload
7、ffmpeg切片推流测试
Windows
在nginx-rtmp-win32-dev\html文件夹中创建vod\1文件夹
![](/assets/blank.gif)
在.\ffmpeg\bin目录地址栏输入cmd回车打开dos窗口(已配置环境变量则直接打开cmd)
![](/assets/blank.gif)
复制以下内容, 在dos窗口中右击粘贴
如果是avi//mkv/wmv格式的视频文件,需要先转换成mp4
ffmpeg -y -i #需要转换的视频文件路径# -c:v libx264 -strict 2 #nginx安装路径#/html/vod/1/output.mp4
将视频转码成ts文件(支持mp4,mov,flv)
ffmpeg -y -i #需要转换的视频文件路径# -vcodec copy -acodec copy -vbsf h264_mp4toannexb #nginx安装路径#/nginx-rtmp-win32-dev/html/vod/1/output.ts
视频切片
ffmpeg -i #nginx安装路径#/html/vod/1/output.ts -c copy -map 0 -f segment -segment_list #nginx安装路径#/html/vod/1/index.m3u8 -segment_time 5 #nginx安装路径#/html/vod/1/index-%03d.ts
输入如下:
![](/assets/blank.gif)
生成文件如下:
![](/assets/blank.gif)
使用谷歌浏览器+Native HLS Playback插件或者使用相应播放器, 如VLC, 输入http://127.0.0.1:8090/vod/1/index.m3u8即可播放
(插件地址:https://chrome.google.com/webstore/detail/native-hls-playback/emnphkkblegpebimobpbekeedfgemhof?hl=zh-CN)
![](/assets/blank.gif)
Linux:由于是在我的私人服务器进行验证,且测试视频包含本人信息,就不贴出来了
java代码比较简单,使用Runtime.getRuntime().exec(command)即可
如果有其他疑问,可以留下评论,我会回复
基于Nginx+rtmp搭建支持hls协议的点播流媒体服务器(windows/Linux)相关推荐
- 树莓派使用nginx+rtmp搭建音频直播流媒体服务器
前言 想使用树莓派连接usb音频采集卡实时采集收音机接收到的音频,树莓派上运行着由nginx+RTMP 搭建的直播流媒体服务器,这样就可以在客户端上通过支持rtmp串流协议的播放器就可以正常接收到音频 ...
- 阿里云个人站点基于nginx代理搭建https协议支持
阿里云个人站点基于nginx代理搭建https协议支持 准备工作 购买免费个人版dv证书 配置nginx 开放防火墙端口 检测是否成功 准备工作 1.个人服务器 2.安装了ssl_moudle的ngi ...
- 服务器搭建和使用 ubuntu_Ubuntu中使用Nginx+rtmp搭建流媒体直播服务
一.背景 本篇文章是继上一篇文章<Ubuntu中使用Nginx+rtmp模块搭建流媒体视频点播服务>文章而写,在上一篇文章中我们搭建了一个点播服务器,在此基础上我们再搭建一个直播服务器, ...
- Qt显示视频流——nginx+rtmp搭建直播服务器(二)
上次介绍的是使用ffmpeg推流,这次介绍的是使用nginx + rtmp搭建直播服务器. 环境:ubuntu 16.04 一. 安装nginx 和 rtmp模块 1. 下载安装 nginx 和 ng ...
- 对基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba、ftp和http)一文的更正2
在<基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba.ftp和http)>一文中对于adsl断线重拨后自动更新路由表的脚本,少了自动平衡双线adsl流量的命令,将 ...
- 对基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba、ftp和http)一文的更正
在<基于ubuntu18.04搭建双线adsl路由器和私有云服务器(samba.ftp和http)>一文中有两处错误,更正如下: 1)"7b. 配置双线adsl路由表" ...
- 用nginx搭建基于rtmp或者http的flv、mp4流媒体服务器
http://itindex.NET/detail/48702-nginx-rtmp-http 一.流媒体播放方式 1. HTTP方式 这种方式要下载FLV视频文件到本地播放,一旦FLV视频文件下载 ...
- 基于Nginx模块搭建直播服务
转载请标明出处: https://blog.csdn.net/u014214308/article/details/82698542 直播技术原理: 客户端(A:主播,推流)通过摄像头采集到视频数据, ...
- linux搭建直播步骤,Linux 下 nginx + rtmp 搭建直播服务
简单粗暴直接上步骤吧: 注 : 以下示例使用的是nginx(版本1.15.3) rtmp(版本1.2.1) 下载nginx和rtmp模块 下载nginx 解压 tar xvf nginx-1.15 ...
最新文章
- 死磕Java并发:深入分析volatile的实现原理
- linux vnc的小黑点和鼠标不同步_公欲善其事 | VNC的安装和使用
- [网络安全自学篇] 四十二.DNS欺骗和钓鱼网站原理详解及防御机理
- day 64 Django 第五天 多表对多表的对应关系ORM
- java连接数据库 oracle,Oracle数据库之一分钟教你学会用java连接Oracle数据库
- Qt 有关ffmpeg的配置
- 无监督︱异常、离群点检测 一分类——OneClassSVM
- 操作系统原理(二)操作系统逻辑结构、CPU的态和中断机制
- python实现oss文件下载
- 双网卡,上网走外网网卡,内网走内网网卡设置。
- css插件载进去ps里面,CSS3Ps(ps图层插件)官方版
- 2022新轻量级个人免签支付源码+手动审核邮件短信推送
- opencv3.0 截取任意形状封闭图形
- 错误排查:packet_write_wait: Connection to XXX XXX XXX XXX port 22: Broken pipe
- 中国医科大计算机在线作业答案,16秋中国医科大学《计算机应用基础(中专起点大专)》在线作业标准答案包100分...
- 针对支付宝-当面付实现的个人支付
- ArrayIndexOutOfBoundsException: 4096 while reading gif file
- MES系统到底是什么?
- User Story
- Windows10 下安装mmdetection 问题之“cannot import name ‘deform_conv_cuda‘”
热门文章
- 平头哥RVB2601板子上手——“救砖“记
- HDU 5130 Signal Interference (2014年广州赛区现场赛D题)
- matlab总谐波失真THD,运放参数的详细解释和分析-part21,总谐波失真(THD)
- python混合运算_计算加减乘除混合运算python实现_加减乘除运算题(Python实现)...
- 解决HTML中换行会出现间隙问题
- UE4如何制作小地图
- 刷脸考勤来势汹汹 各大企业争当尝鲜者
- 费列罗附属公司完成对金宝汤公司旗下凯尔森集团的收购
- rust wu马赛克_张大仙直播卡成马赛克,着装太丑耻辱下播,一复播让粉丝恋爱了...
- js 通知触发提示音_js通知消息提示音