HLS协议之nginx-hls-多码率测试环境搭建

运行环境:ubuntu 20.04

时间:2024年10月26日

环境更新

复制代码
sudo apt-get update
sudo apt-get install build-essential libtool  libpcre3 libpcre3-dev  zlib1g-dev  openssl

下载nginx

复制代码
wget http://nginx.org/download/nginx-1.19.2.tar.gz
tar xvzf nginx-1.19.2.tar.gz
cd nginx-1.19.2/
./configure --prefix=/usr/local/rtmp-nginx --with-http_ssl_module --add-module=/home/jbj/zvmdia/nginx/nginx-http-flv-module
 sudo make -j 8
 sudo make install
 最终安装到⽬录:
ls /usr/local/rtmp-nginx/


sudo chown -R jbj:root .
sudo chmod  -R 777 .

nginx配置测试

1.启动nginx

2.ffmpeg 推流,nginx会监听到推流 进行application live转码出多个高低码流文件

复制代码
 ffmpeg -re -i  time.mp4  -vcodec copy -acodec copy  -f flv -y  rtmp://127.0.0.1/live/jbj

3.ffplay 拉流播放

复制代码
ffplay   rtmp://127.0.0.1/live/jbj
或者使用vlc 访问其他码流
http://127.0.0.1:8081/hls/jbj.m3u8
http://127.0.0.1:8081/hls/jbj_low/index.m3u8
http://127.0.0.1:8081/hls/jbj_hi/index.m3u8

nginx配置文件

/tmp/hls 转码文件目录

宽带和码率不匹配时,建议提示用户手动切换。因为网络抖动会导致频繁切换,最终观影体验极差。

cpp 复制代码
user root;
# 关闭 Daemon 进程
daemon off;

# 关闭 Master 进程
master_process off;

# 设置日志级别
error_log /tmp/error.log debug;

events {
    worker_connections 1024;
}

rtmp {
    server {
        listen 1935;
        chunk_size 4000;

        # Live 应用配置
        application live {
            live on;

            # 使用 FFmpeg 进行转码并输出多码率 FLV 流
            exec /usr/bin/ffmpeg -i rtmp://localhost/live/$name 
                -c:a copy -c:v libx264 -b:v 300K -g 30 -s 720x420  -f flv rtmp://localhost/hls/$name_hi 
                -c:a copy -c:v libx264 -b:v 200K -g 30 -s 462x254 -f flv rtmp://localhost/hls/$name_mid 
                -c:a copy -c:v libx264 -b:v 100K -g 30 -s 230x128 -f flv rtmp://localhost/hls/$name_low;
        }

        # HLS 应用配置
        application hls {
            live on;
            hls on;
            hls_path /tmp/hls;
            hls_nested on;
            hls_fragment 2s;
            hls_playlist_length 6s;

            # 配置不同码率的 HLS 流
            hls_variant _hi  BANDWIDTH=350000;
            hls_variant _mid BANDWIDTH=250000;
            hls_variant _low BANDWIDTH=150000;
        }
    }
}

http {
    server {
        listen 8081;

        # 默认 Web 服务根目录
        location / {
            root html;
            index index.html index.htm;
        }

        # HLS 文件访问配置
        location /hls {
            types {
                application/vnd.apple.mpegusr m3u8;
                video/mp2t ts;
            }
            alias /tmp/hls;
            add_header Cache-Control no-cache;
        }
    }
}
相关推荐
JavaLearnerZGQ18 小时前
配置Docker镜像源
运维·docker·容器
慕木沐18 小时前
【搭建个人网站】借助内网穿透+云服务器中转
运维·服务器
金仓拾光集18 小时前
金仓数据库践行社会责任:以技术驱动绿色计算与数据普惠
运维·数据库·oracle·kingbase·数据库平替用金仓·金仓数据库
金仓拾光集19 小时前
金仓数据库赋能地铁AFC系统升级:核心技术实现与落地
运维·数据库·ux·kingbase·kingbasees·数据库平替用金仓·金仓数据库
染指秃头19 小时前
VM虚拟机共享宿主机代理(Ubuntu24.04)
linux·运维·服务器
摇滚侠19 小时前
Nginx 与 F5 负载均衡的区别
nginx·负载均衡
科海思 132-6O59 692520 小时前
矿泉水除溴化物的解决方案
大数据·运维
深鱼~20 小时前
从本地存储到全球访问:1Panel的家庭服务器革命
大数据·运维·服务器
栀椩20 小时前
frp+公网服务器实现内网穿透方案
运维·服务器
爬台阶的蚂蚁20 小时前
内网麒麟系统安装 uv 的完整步骤
运维·服务器·uv