Nginx配置搭建m3u8格式的视频播放服务
本文采用Nginx+FFmpeg来进行m3u8格式的视频播放服务,解决:nginx如何搭建视频服务器,要求流媒体服务,视频hls分片加载
FFmpeg概念介绍
FFmpeg是一个开源的计算机程序,可以用来记录、转换、编辑和流化数字音频和视频。FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“Fast Forward”。FFmpeg既是一个程序库,也是一个命令行工具,可以对各种格式的音视频或图像
FFmpeg支持视频格式
FFmpeg支持多种视频格式,包括但不限于:AVI、WMV、MOV、FLV、MKV、MP4、MPEG、3GP等¹²⁴。如果您想了解更多关于FFmpeg的信息,可以参考以下链接:¹²⁴¹: https://zhuanlan.zhihu.com/p/117523405
²: http://ruanyifeng.com/blog/2020/01/ffmpeg.html
⁴: https://ffmpeg.org/
源: 与必应的对话, 2023/6/29
(1) FFMPEG命令入门到提高,一篇文章就够了 - 知乎. https://zhuanlan.zhihu.com/p/117523405.
(2) FFmpeg 视频处理入门教程 - 阮一峰的网络日志. http://ruanyifeng.com/blog/2020/01/ffmpeg.html.
(3) ffmpeg所支持的所有视频或音频文件类型 - CSDN博客. https://blog.csdn.net/COCO56/article/details/107098664.
(4) 如何用FFMpeg生成视频 - 知乎. https://zhuanlan.zhihu.com/p/465418866.
(5) FFmpeg概述及编码支持 - 知乎. https://zhuanlan.zhihu.com/p/37516093.
安装Nginx,还是简单说一下
1.安装gcc
$ yum install -y gcc
2.安装第三方库:pcre 和 zlib
$ yum install -y pcre pcre-devel
$ yum install -y zlib zlib-devel
3.检查gcc是否安装成功
$ gcc --version
4.下载安装包
// 使用前要确保系统已经安装了wget
// 如果没有则执行 yum -y install wget 进行安装
$ wget https://nginx.org/download/nginx-1.21.6.tar.gz
5.安装nginx
// 解压
$ tar zxvf nginx-1.21.6.tar.gz
// 进入解压后的目录
$ cd nginx-1.21.6
// 安装
$ ./configure --prefix=/usr/local/nginx // /usr/local/nginx 指定的安装目录
// 编译
$ make
$ make install
6.nginx相关命令
$ ./nginx //启动nginx
$ ./nginx -s stop //停止nginx
$ ./nginx -s quit //优雅的关闭,在退出前完成已经接受的连接请求
$ ./nginx -s reload // 重新加载nginx配置
7.开启nginx端口号
$ firewall-cmd --state // 查看防火墙状态
$ systemctl stop firewalld.service // 关闭防火墙(不推荐使用)
$ systemctl disable firewalld.service // 阻止防火墙开机启动
$ firewall-cmd --reload // 重启防火墙
$ firewall-cmd --zone=public --list-ports // 查看防火墙所有开放的端口
$ firewall-cmd --permanent --zone=public --remove-port=80/tcp // 关闭80端口
$ firewall-cmd --zone=public --add-port=80/tcp --permanent // 放行防火墙80端口(–permanent永久生效,没有此参数重启后失效)
$ firewall-cmd --reload // 重启防火墙
安装ffmpeg
1.安装EPEL软件源
sudo yum install -y epel-release
2.安装Nux Dextop软件源,它提供了FFmpeg的最新版本
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
3.安装FFmpeg及其相关依赖
sudo yum install -y ffmpeg ffmpeg-devel
4.验证FFmpeg安装
ffmpeg -version
视频进行格式转换,生成m3ug+ts分片文件
ffmpeg \
-i test.mp4 \
-hls_time 10 \
-hls_list_size 0 \
-hls_segment_filename ./hls/test_%05d.ts \
./hls/test.m3u8
参数说明
-i test.mp4:指定要处理的视频文件。
-hls_time 10:指定每个切片的时间为10秒。
-hls_list_size 0:切片列表限制,无限制。
-hls_segment_filename ./hls/test_%05d.ts:自定义切片的文件名,这里会生成类似:test_00001.ts的视频文件。
./hls/test.m3u8:保存切片信息的m3u8文件。
参考另一种mp4转m3u8
ffmpeg -i /m3u8/demo.mp4 -c:v copy -c:a copy -f ssegment -segment_format mpegts -segment_list /m3u8/hls/test.m3u8 -segment_time 10 /m3u8/hls/test%05d.ts
m3u8/demo.mp4输入的mp4文件
m3u8/hls/test.m3u8输出的m3u8文件
-segment_time设置每片的长度,单位为秒
-segment_list :段文件的名称,%05d表示5位数字
生成的效果是:将demo.mp4视频文件每10秒生成一个ts文件,最后生成一个m3u8文件,m3u8文件是ts的索引文件。
修改nginx配置文件
需要加入一段加载视频分片后的配置信息,这样才能正常访问切片后的视频源
server {
listen 80;
server_name your_domain.com; # 替换为您的域名或IP地址
location /videos {
root /path/to/hls; # 替换为您的视频文件所在的目录
add_header Cache-Control no-cache;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
}
}
注意:root的配置只能配置到vidoes上下文路径的上一级目录,否则视频地址会出现404错误
检查Nginx配置文件的语法是否正确
sudo nginx -t
至此,您已经成功搭建了一个基于Nginx的视频服务器,可以使用HLS分片加载流媒体视频
将您的视频文件放置在配置中指定的目录下,并通过 http://your_domain.com/your_video_file.m3u8
的URL访问视频,其中 your_domain.com
是您的域名或IP地址,your_video_file
是您的视频文件名。
请注意,确保视频文件已经通过HLS分片切割成 .m3u8
和 .ts
文件,并存储在合适的目录中。您可以使用工具如FFmpeg等来进行HLS分片切割。