媒体转码切片_分布式直播系统(二)【搭建单点rtmp\http-flv\hls流媒体服务器】...

本文介绍了基于nginx-rtmp-module搭建的流媒体服务器,支持RTMP、HTTP-FLV、HLS等多种直播协议,并提供实时录制、流状态监控等功能。还详细阐述了服务器的改进、搭建流程、配置文件详解及推流、后台监控等关键步骤。
摘要由CSDN通过智能技术生成

声明

转载请注明出处:https://blog.csdn.net/impingo

项目地址:https://github.com/im-pingo/nginx-rtmp-module

服务器介绍

本系列博客中所用到的流媒体服务器是nginx-rtmp-module,文章头部有项目地址。 https://github.com/im-pingo/nginx-rtmp-module是在AlexWoo的基础上进一步开发的。

服务器功能

  1. 接收rtmp实时流
  2. 支持rtmp、http-flv、http-ts、hls、hls+(内存切片) 直播服务
  3. 支持实时录制功能
  4. 支持主动推流、拉流操作
  5. 支持动态推流、拉流操作
  6. 支持鉴权功能
  7. 支持流状态监控
  8. 支持时间戳修复

我所做的改进

  1. 已经修复了AlexWoo项目中的一些bug
  2. 使rtmp、http-flv、hls、http-ts直播支持mp3、h265编码
  3. 支持http-ts直播协议
  4. 支持直播时移服务
  5. 支持hls+(内存切片)服务(目前仅在dev分支,经过进一步测试后会合并到master分支上)
  6. 支持服务器端自动修复异常的音视频时间戳功能
  7. 修复流状态监控后台页面

未来计划

我会持续维护https://github.com/im-pingo/nginx-rtmp-module项目,并且希望能够得到更多人的能够发现问题并且及时在github上提出问题,只要本人看到都会给出回复并且及时修复。

近期准备上线的功能

  1. 接收http-ts推流
  2. 支持http-ts回源
  3. 支持http-fmp4直播协议

搭建流程

环境

本篇文章以Centos系统为例。

安装依赖

yum install -y gcc gcc-c++ openssl openssl-devel pcre-devel

安装

git clone https://github.com/im-pingo/nginx-client-module.git
git clone https://github.com/im-pingo/nginx-multiport-module.git
git clone https://github.com/im-pingo/nginx-toolkit-module.git
git clone https://github.com/im-pingo/nginx-rtmp-module.git
git clone https://github.com/nginx/nginx.git
cd nginx
./auto/configure --add-module=../nginx-client-module   
    --add-module=../nginx-multiport-module             
    --add-module=../nginx-toolkit-module               
    --add-module=../nginx-rtmp-module

make && sudo make install

配置文件

配置文件详解

后面会专门写几篇博客来解析其中的配置项和对应的应用场景。

修改配置

cd /usr/local/nginx
vim conf/nginx.conf

配置模板(此配置能够满足单点服务)

user  root;
daemon on;
master_process on;
worker_processes  1;
#worker_rlimit 4g;
#working_directory /usr/local/openresty/nginx/logs;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;

worker_rlimit_nofile 102400;
worker_rlimit_core   2G;
working_directory    /tmp;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}
stream_zone buckets=1024 streams=4096;

rtmp {
    server {
        listen 1935;
        application live {
            send_all off;
            zero_start off;
            live on;
            hls on;
            hls_path /tmp/hls;
            wait_key on;
            wait_video on;
            cache_time 2s;
            low_latency on;
            fix_timestamp 2000ms;
            # h265 codecid, default 12
            hevc_codecid  12;
        }
    }
}

http {
    server {
        listen     80;
        location / {
           chunked_transfer_encoding on;
            root html/;
        }
        location /flv {
            flv_live 1935 app=live;
        }
        location /ts {
            ts_live 1935 app=live;
        }
        location /rtmp_stat {
            rtmp_stat all;
            rtmp_stat_stylesheet /stat.xsl;
        }
        location /xstat {
            rtmp_stat all;
        }
        location /sys_stat {
            sys_stat;
        }
        location /hls {
              # Serve HLS fragments
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
        }
        location /dash {
            # Serve DASH fragments
            root /tmp;
            add_header Cache-Control no-cache;
        }
    }
}

开启流监控页面

cd nginx-rtmp-module
cp stat.xsl /usr/local/nginx/html/stat.xsl

启动nginx

cd /usr/local/nginx
./sbin/nginx

注意事项

由于nginx需要监听80和1935端口,所以一定要确保你的服务器防火墙没有屏蔽这两个端口。

推流

RTMP推流地址: rtmp://your-server-ip/live/stream-name

播放地址:

  • rtmp播放地址: rtmp://your-server-ip/live/stream-name
  • http-flv播放地址:http://your-server-ip/flv/stream-name
  • http-ts播放地址:http://your-server-ip/ts/stream-name
  • hls播放地址:http://your-server-ip/hls/stream-name.m3u8

常用的推流工具有OBS和ffmpeg,具体使用方法这里不再赘述,只给出ffmpeg推送文件的命令。

ffmpeg -re -i your-input-file -vcodec libx264 -acodec aac -f flv rtmp://your-server-ip/live/stream-name

将上述命令中的your-input-file替换成你的媒体文件名,将your-server-ip替换成你的服务器ip地址,stream-name是你希望命名的流名(可随意)。 注意:ffmpeg命令中-re参数含义是按照真实时间戳速率读取文件,这个选项在推送文件到直播服务器中是必须的。另外-vcodec和-acodec是转码参数,如果你要推送的文件视频编码格式本身就是h264编码并且音频编码格式是aac或者mp3的话则不需要这两个参数。(重新编码非常消耗计算资源,使用时要注意)

后台监控

在浏览器中打开:http://your-server-ip/rtmp_stat 可以通过后台页面实时查看当前在线的推拉流情况。

12a5bab6255f13b031e451ccfab84a20.png

QQ交流群:697773082(流媒体人)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值