因项目需要,需要在开发环境搭建一个HLS 推流。实现步骤如下:
安装ffmpeg
bash
yum install ffmpeg -y
在一个目录下上传001.mp4、002.mp4作为测试推流的原始文件。使用ffmpeg 进行转换。
bash
#!/bin/sh
`在这里插入代码片`nohup ffmpeg -stream_loop -1 \
-i /data/public/video/mp4/001.mp4 \
-c:v libx264 -preset veryfast -crf 23 \
-c:a aac -b:a 128k \
-hls_time 4 \
-hls_list_size 20 \
-hls_flags delete_segments \
-f hls \
/data/public/video/m3u8/001/index.m3u8 \
> /data/public/video/m3u8/001/ffmpeg.log 2>&1 &
bash
#!/bin/sh
nohup ffmpeg -stream_loop -1 \
-i /data/public/video/mp4/002.mp4 \
-c:v libx264 -preset veryfast -crf 23 \
-c:a aac -b:a 128k \
-hls_time 4 \
-hls_list_size 20 \
-hls_flags delete_segments \
-f hls \
/data/public/video/m3u8/002/index.m3u8 \
> /dev/null 2>&1 &
配置Nginx
bash
# 核心配置:代理 HLS 视频目录
location /hls/ {
# 1. 指定视频文件在服务器上的实际根目录
# 注意:路径末尾的 '/' 很重要
alias /data/public/video/m3u8/;
# 2. 正确设置 MIME 类型,这是 HLS 播放的关键
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
# 3. 解决跨域问题 (CORS),允许前端页面访问
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Range';
# 4. 优化缓存策略
# m3u8 文件更新频繁,不缓存或缓存时间很短
# ts 分片文件生成后不变,可以长期缓存
expires 1y;
add_header Cache-Control "public, immutable";
}
两个访问地址分别如下: