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;
        }
    }
}
相关推荐
hgz07101 小时前
Docker Compose
运维·docker·容器
小鹏linux1 小时前
【linux】进程与服务管理命令 - batch
linux·运维·服务器
人工智能训练7 小时前
OpenEnler等Linux系统中安装git工具的方法
linux·运维·服务器·git·vscode·python·ubuntu
QT 小鲜肉8 小时前
【Linux命令大全】001.文件管理之which命令(实操篇)
linux·运维·服务器·前端·chrome·笔记
fantasy5_59 小时前
Linux 动态进度条实战:从零掌握开发工具与核心原理
linux·运维·服务器
weixin_4624462310 小时前
exo + tinygrad:Linux 节点设备能力自动探测(NVIDIA / AMD / CPU 安全兜底)
linux·运维·python·安全
莫逸风10 小时前
【局域网服务方案】:无需找运营商,低成本拥有高性能服务器
运维·服务器
oMcLin10 小时前
CentOS 7 频繁出现 “Connection Refused” 错误的原因分析与解决
linux·运维·centos
饭九钦vlog11 小时前
银河麒麟修复openssh升级脚本
linux·运维
Amy_au11 小时前
Linux week 01
linux·运维·服务器