MP4流媒体服务器搭建指南
一、环境准备和依赖安装
1、操作系统:本文以Ubuntu 18.04为例进行说明,其他Linux发行版可能略有不同。
2、Nginx:作为HTTP服务器,用于提供静态文件服务和反向代理功能。
3、FFmpeg:用于视频格式转换和推流。
4、Nginx-rtmp-module:为Nginx添加RTMP协议支持,实现直播和点播功能。
5、Docker(可选):为了简化安装过程,可以使用Docker快速部署Nginx和相关模块。
6、依赖库:确保安装了以下依赖库,以便编译Nginx和相关模块时使用。
PCRE (Perl Compatible Regular Expressions)
Zlib
OpenSSL
二、Nginx安装与配置
1、下载并解压Nginx源码
wget http://nginx.org/download/nginx-<version>.tar.gz tar -zxvf nginx-<version>.tar.gz cd nginx-<version>
将<version>
替换为具体的Nginx版本号,如“1.21.6”。
2、下载并解压Nginx-rtmp-module源码
git clone https://github.com/arut/nginx-rtmp-module.git cd nginx-<version>
3、配置Nginx编译选项
在配置之前,确保所有必要的依赖库已经安装,可以使用包管理器(如apt)来安装这些依赖库。
sudo apt-get update sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev
执行以下命令配置Nginx:
./configure --prefix=/usr/local/nginx \ --add-module=../nginx-rtmp-module \ --with-http_ssl_module \ --with-http_mp4_module \ --with-http_flv_module
这里指定了Nginx的安装路径为/usr/local/nginx
,并添加了RTMP模块、MP4模块和FLV模块的支持。
4、编译并安装Nginx
make sudo make install
5、配置Nginx
编辑Nginx的配置文件(通常位于/usr/local/nginx/conf/nginx.conf
),添加RTMP和HLS的配置:
rtmp { server { listen 1935; # RTMP监听端口 chunk_size 4096; application live { live on; # 允许直播输入 record off; # 关闭录制功能 } } } http { server { listen 8080; # HTTP监听端口 server_name localhost; # HLS配置 location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } alias /mnt/hls; # HLS文件存储路径 add_header Cache-Control no-cache; } } }
这里配置了RTMP服务器监听1935端口,并启用了HLS支持,HTTP服务器监听8080端口,用于提供HLS播放列表和TS切片文件。
三、使用FFmpeg推流至Nginx-rtmp
1、安装FFmpeg
如果尚未安装FFmpeg,可以使用以下命令安装:
sudo apt-get install ffmpeg
2、推流至Nginx-rtmp
使用FFmpeg将本地视频文件推流至Nginx-rtmp服务器:
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://localhost:1935/live/stream
这里,input.mp4
是要推流的本地视频文件名,rtmp://localhost:1935/live/stream
是Nginx-rtmp服务器的推流地址。
四、通过HLS播放流媒体
1、生成HLS播放列表
当视频流推送到Nginx-rtmp服务器后,可以使用FFmpeg或其他工具将RTMP流转换为HLS格式,以便在网页上播放,使用FFmpeg转换并保存为HLS格式:
ffmpeg -i rtmp://localhost:1935/live/stream -c copy -start_number 0 -hls_time 10 -hls_list_size 0 -f hls /mnt/hls/index.m3u8
这里,-hls_time 10
表示每个TS切片文件包含10秒的视频数据,-hls_list_size 0
表示生成无限期的播放列表。
2、访问HLS播放列表
打开浏览器,输入以下URL即可观看HLS直播:
http://localhost:8080/hls/index.m3u8
这里,http://localhost:8080
是Nginx HTTP服务器的地址,/hls/index.m3u8
是HLS播放列表的路径。
五、常见问题解答(FAQs)
问:为什么无法推流至Nginx-rtmp服务器?
答:请检查以下几点:
确保Nginx-rtmp模块已正确安装并加载。
确保Nginx配置文件中RTMP监听端口(默认1935)未被防火墙阻止。
确保推流地址正确无误,包括协议头(如rtmp://)、服务器地址、端口号以及应用程序名称(如/live)。
确保推流端(如FFmpeg)有足够的权限访问Nginx服务器。
问:如何更改HLS切片文件的时长或数量?
答:在生成HLS播放列表时,可以使用FFmpeg的-hls_time
选项来设置每个切片文件的时长(以秒为单位),使用-hls_list_size
选项来设置播放列表中的最大切片文件数量。-hls_time 10 -hls_list_size 5
表示每个切片文件包含10秒的视频数据,播放列表最多包含5个切片文件。