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分片切割。

 

posted @ 2023-06-29 16:34  子墨老师  阅读(7165)  评论(0编辑  收藏  举报