因项目需要,需要在开发环境搭建一个HLS 推流。实现步骤如下:

安装ffmpeg

yum install ffmpeg -y

在一个目录下上传001.mp4、002.mp4作为测试推流的原始文件。使用ffmpeg 进行转换。
001.sh

#!/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 &

002.sh

#!/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

# 核心配置:代理 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";
}

两个访问地址分别如下:
https://192.168.31.100/hls/001/index.m3u8
https://192.168.31.100/hls/001/index.m3u8

更多推荐