基于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

如出现报错:

(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, 则启动成功

Linux

重启nginx:

如已配置环境变量,直接执行

nginx -s reload

未配置则

cd /usr/local/nginx/sbin
./nginx -s reload

7、ffmpeg切片推流测试

Windows

在nginx-rtmp-win32-dev\html文件夹中创建vod\1文件夹

在.\ffmpeg\bin目录地址栏输入cmd回车打开dos窗口(已配置环境变量则直接打开cmd)

复制以下内容, 在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

输入如下:

生成文件如下:

使用谷歌浏览器+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)

Linux:由于是在我的私人服务器进行验证,且测试视频包含本人信息,就不贴出来了

java代码比较简单,使用Runtime.getRuntime().exec(command)即可

如果有其他疑问,可以留下评论,我会回复

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
AOKU AMS流媒体直播服务系统是北京北极星通信息技术有限公司研发的一套基于IP网络的音视频应用平台,采用模块化,跨平台的架构设计,采用自主研发的高性能 流媒体服务引擎,支持多种主流流媒体协议(RTP、 RTMP等);支持直播、点播、录播等多种应用模式;支持PC机、手机、机顶盒等多种接入终端。方便用户建立多种应用模式。    AOKU AMS系统内置高性能流媒体服务器,Web服务器,可直接提供基于Web的Flash直播、点播应用。是可以迅速构建Flash平台的利器。   奥酷流媒体直播服务软件AMS系能特点: 1、支持TCP、UDP协议支持单播、组播等多种应用模式,支持TS、RTMP、RTSP、HTTP、UDP等多种协议; 2、支持高清,标清直播,支持在线点播视频直播、视频广播等业务,支持虚拟文件直播功能,可编排文件直播列表; 3、可通过任何IP网络提供流媒体业务,能够跨越代理服务器、防火墙; 4、能够对rtmp流进行二次转发,同时转发给多个rtmp流媒体服务器; 5、响应点播时间控制在100ms以内,支持暂停、拖动等特技操作,无需下载播放器直播延时可控制在1s左右; 6、AMS服务器支持部署到WindowsLinux、Unix等多种操作系统上,单台AMS最多支持多达500个单播用户的接入,并支持组播发布模式,可以使接收用户多达无限,通过AMS服务器的集群部署,也能够支持成千上万的单播用户接入; 7、支持H.264 MP3或者H.264 AAC直播,支持Windows,Android,IOS平台免下载插件观看; 8、支持flash、VLC、WMP、暴风影音等多种播放器接入,使得应用更加广泛; 9、除了正常接收奥酷的硬件编码器发布的直播流外,还能够接收来自FME上的直播流; 10、支持直播同时进行录像、可设置录像任务,可录制mp4或者FLV格式的文件,无需转码,可直接供客户端进行点播; 11、开放的系统架构,提供二次开发接口,可轻松的融入到用户已有的平台或网站平台中、或在此基础上进行二次开发等。
搭建RTMP流媒体服务,你需要完成以下两个步骤: 1. 安装NginxRTMP模块 2. 配置NginxRTMP模块 下面我将为你详细介绍如何完成这两个步骤。 ## 安装NginxRTMP模块 ### 安装Nginx 首先,你需要安装Nginx。在Ubuntu系统上,可以使用以下命令进行安装: ``` sudo apt-get update sudo apt-get install nginx ``` 安装完成后,你可以使用以下命令验证Nginx是否成功安装: ``` nginx -v ``` 如果成功安装,你应该可以看到Nginx的版本信息。 ### 安装RTMP模块 安装Nginx后,你需要安装RTMP模块。RTMP模块可以让Nginx支持RTMP协议,从而实现流媒体服务。 在Ubuntu系统上,你可以使用以下命令下载RTMP模块: ``` sudo apt-get install libnginx-mod-rtmp ``` 安装完成后,你需要启用RTMP模块。可以使用以下命令启用: ``` sudo ln -s /usr/share/nginx/modules-available/mod-rtmp.conf /etc/nginx/modules-enabled/ sudo ln -s /usr/share/nginx/modules-available/mod-rtmp.load /etc/nginx/modules-enabled/ ``` ## 配置NginxRTMP模块 安装完成NginxRTMP模块后,你需要配置NginxRTMP模块以实现流媒体服务。 ### 配置Nginx 首先,你需要编辑Nginx的配置文件。可以使用以下命令打开默认Nginx配置文件: ``` sudo nano /etc/nginx/nginx.conf ``` 在文件末尾添加以下代码: ``` rtmp { server { listen 1935; chunk_size 4096; application live { live on; record off; } } } ``` 这里我们定义了一个RTMP服务器,它将监听1935端口并支持流媒体服务。在application块中,我们定义了一个名为live的应用程序,它将允许直播,并关闭录制。 ### 启动Nginx 完成Nginx配置后,你需要启动Nginx。可以使用以下命令启动: ``` sudo service nginx start ``` ### 配置推流和拉流 现在,你可以使用推流软件将视频流推送到服务器上。例如,可以使用OBS Studio或FFmpeg进行推流。 在OBS Studio中,你需要配置以下设置: - 流类型:自定义流服务器 - URL:rtmp://your-server-ip:1935/live - 流关键字:随意命名 在FFmpeg中,你可以使用以下命令进行推流: ``` ffmpeg -re -i input.mp4 -c copy -f flv rtmp://your-server-ip:1935/live/stream-name ``` 这里我们将本地input.mp4文件推流到服务器上,流名称为stream-name。 完成推流后,你可以使用以下命令进行拉流: ``` ffplay rtmp://your-server-ip:1935/live/stream-name ``` 这里我们使用ffplay命令进行拉流。你也可以使用其他支持RTMP协议的播放器进行拉流。 到这里,你已经成功搭建RTMP流媒体服务。祝你好运!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值