您的位置:

深入剖析nginxrtmp推流

一、nginxrtmp推流介绍

随着高清视频的普及,对音视频直播的需求越来越高,而nginxrtmp作为一个优秀的流媒体服务器,其表现出色,在企业级音视频直播中被广泛使用。

nginx-rtmp-module是一个第三方开源Nginx模块,其提供了即时媒体流传输的能力,实现了RTMP协议中的Flash Player / AIR,MP3播放器,流媒体服务器等的功能。同时,它也为用户提供了非常高的自定义能力和灵活性,适用于大部分的市场用例。

二、nginxrtmp推流的常用功能

以下是nginx-rtmp-module模块在推流方面的核心功能:

1、支持各种编码格式的推流,如flv、h264等;

2、支持rtmp动态转码功能,在不同的分辨率下,通过设置不同的码率来实现不同质量的推流;

3、支持rtmp流控功能,确保服务器在承受能力的范围内正常工作,避免出现堵塞,影响正常业务;

4、支持推流重试、断开重连、推流加密等多种安全性的功能。

三、nginxrtmp推流的基本配置

下面是nginxrtmp推流的基本配置文件,我们可以针对不同的需求来进行配置:

rtmp {
    server {
        listen 1935;
        ping 30s;
        notify_method get;
        buflen 5s;
        application mylive { #应用名,客户端把流发布到 rtmp://server/live/STREAM_NAME 
            live on; #开启直播 
            hls on; #如果客户端想要 hls(http)流,就把这个写上 
            hls_path /mnt/hls/live; #HLS 的存放路径 
            hls_fragment_naming system;
            hls_fragment 5s;
            hls_playlist_length 60s;
            hls_fragment_slicing align;
            hls_nested on;
            hls_variant _ low 20 yield on;
            hls_sync 100ms;
            hls_continuous on;
            #hls_variant _270p 270000; #如果有多个分辨率,可以定义 variant 子片段 
            #record off; #是否记录直播流,这个由下面的 on/off 控制 
            #on_publish 实时判断用户是否有发布权限,可以在这里控制 
            #on_publish http://127.0.0.1:8080/pub_auth;
            drop_idle_publisher 1h; #关闭的时候释放发布端资源,hls 的 clear 时间由 hls_playlist_length 决定 
            idle_streams off;
        }
    }
    server_names_hash_bucket_size 128;
    server_names_hash_max_size 10240;
}

四、nginxrtmp推流的关键代码

1、推流

在进行推流的过程中,需要用到FFmpeg,代码如下:

ffmpeg -re -i video.mp4 -vcodec copy -acodec copy -f flv rtmp://localhost/mylive/mystream

2、断开流

断开流需要执行rtmpexec,代码如下:

rtmpexec -i rtmp://localhost/mystream -o mystream.mp4 -c copy

3、重复推流的hook程序

nginxrtmp提供了一种名为hook的机制,可以根据实际需求对其进行配置,比如当有用户推流的时候,可以在hook配置中进行见增减,代码如下:

rtmp {
  server {
    application mystream {
      live on;
      on_publish http://127.0.0.1:8080/process_stream;
    }
  }
}

sub process_stream {
  my $args = shift;
  my $app = $args->{app};
  my $name = $args->{name};

  print "Stream published: $app/$name\n";
}

五、nginxrtmp推流的优化建议

为了提高音视频直播的质量,可以根据以下建议来进行调优:

1、调整缓存大小,防止堵塞,降低延迟;

2、根据带宽的使用情况,调整码率和视频分辨率;

3、使用rtmpchunkdump进行调试,查看流的情况;

4、对流进行预处理,如实时转码、分片等,优化直播质量。

六、总结

以上就是nginxrtmp推流的一个简单介绍,随着音视频技术的发展,其中的细节也在不断变化。我们需要根据实际情况进行不断优化和调整,以提供更好的直播体验。