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;
        }
    }
}
相关推荐
ζั͡山 ั͡有扶苏 ั͡✾15 小时前
EFK 日志系统搭建完整教程
运维·jenkins·kibana·es·filebeat
jun_bai15 小时前
python写的文件备份网盘程序
运维·服务器·网络
欢喜躲在眉梢里16 小时前
CANN 异构计算架构实操指南:从环境部署到 AI 任务加速全流程
运维·服务器·人工智能·ai·架构·计算
weixin_5377658016 小时前
【容器技术】虚拟化原理与Docker详解
运维·docker·容器
胡斌附体17 小时前
docker健康检查使用
运维·docker·依赖·健康检查
云飞云共享云桌面17 小时前
无需配置传统电脑——智能装备工厂10个SolidWorks共享一台工作站
运维·服务器·前端·网络·算法·电脑
柳鲲鹏17 小时前
OpenCV:文件视频防抖,python版
python·opencv·音视频
福尔摩斯张17 小时前
《C 语言指针从入门到精通:全面笔记 + 实战习题深度解析》(超详细)
linux·运维·服务器·c语言·开发语言·c++·算法
柳鲲鹏17 小时前
OpenCV:实时视频防抖,python版(改进连续帧处理)
音视频
虚伪的空想家18 小时前
arm架构服务器使用kvm创建虚机报错,romfile “efi-virtio.rom“ is empty
linux·运维·服务器·javascript·arm开发·云原生·kvm