# 自制HLS视频流

image-20250208231619262

# 环境

  • 操作系统:CentOS 7

# 简介

FFmpeg 是一个功能强大的开源多媒体处理工具集,包含 libavcodec、libavformat 和 libavutil 等核心库。它支持多种音视频格式的转换、采样率设置、流媒体捕获以及视频尺寸调整等操作。

# 安装步骤

# 1. 启用EPEL仓库

sudo yum install epel-release

# 2. 启用RPM Fusion仓库

sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm

# 3. 安装FFmpeg

sudo yum install ffmpeg ffmpeg-devel

# 4. 验证安装

ffmpeg -version

# HLS流媒体制作

# 示例:将demo.mp4转换为HLS格式

ffmpeg -i demo.mp4 \
       -c:v libx264 \
       -preset ultrafast \
       -crf 23 \
       -c:a aac \
       -b:a 128k \
       -map 0:v:0 \
       -map 0:a:0 \
       -f hls \
       -hls_time 4 \
       -hls_list_size 0 \
       -hls_base_url "demo/" \
       -hls_segment_filename "demo/demo_%03d.ts" \
       demo.m3u8

# 参数说明

参数 说明
-i demo.mp4 指定输入文件
-c:v libx264 使用H.264编码器
-preset ultrafast 使用最快的编码预设
-crf 23 视频质量参数(范围0-51,值越小质量越高)
-c:a aac 使用AAC音频编码
-b:a 128k 设置音频比特率为128kbps
-map 0:v:0 -map 0:a:0 选择第一个视频和音频流
-f hls 指定输出格式为HLS
-hls_time 4 设置每个TS切片时长为4秒
-hls_list_size 0 播放列表包含所有切片
-hls_base_url "demo/" 设置切片文件的基础路径
-hls_segment_filename "demo/demo_%03d.ts" 指定切片文件命名格式

image-20250208231245870

image-20250208231334176

# Nginx服务器配置

# 文件存放路径

/usr/share/nginx/html/video

# Nginx配置示例

server {
    listen 80;
    server_name xxx.com;
    
    location /hls/ {
        alias /usr/share/nginx/html/video/;
        add_header Access-Control-Allow-Origin *;
        add_header Cache-Control no-cache;
        expires 30s;
        
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t ts;
        }
    }
}

# 配置生效

sudo systemctl restart nginx

# 播放链接示例

http://xxx.com/hls/demo.m3u8

# 播放方法

  1. 打开支持HLS的播放器(如VLC、PotPlayer等)
  2. 添加网络流,输入.m3u8链接
  3. 开始播放

# 注意事项

  • 确保服务器防火墙开放80端口
  • 视频文件路径和Nginx配置中的路径需保持一致
  • 可根据实际需求调整HLS切片时长和视频质量参数
  • 视频太长,可以将视频切割后再分片,切割工具 (opens new window)