分布式直播系统(三)【Nginx-rtmp rtmp、http-flv、http-ts、hls、hls+ 配置说明】

9 篇文章 2 订阅
1 篇文章 0 订阅

转载请注明出处:https://blog.csdn.net/impingo
项目地址:https://github.com/im-pingo/pingos

全局配置

配置项参数类型默认值描述
server_names_hash_max_size整型数512服务器server_name的最大长度
listen整型数1935rtmp服务监听端口
server_name字符串作用同http的server_name,允许不同域名使用不同配置
server配置区块作用同http中的server,允许同时配置多个server区块
application配置区块作用类似http配置中的location,在rtmp中被称作挂载点
so_keepalive布尔类型offtcp socket 选项
timeout时间60000ms连接超时时间,如果tcp连接建立长时间不发数据,服务器会断开这条tcp连接
ping时间60000msrtmp服务的ping功能,rtmp连接建立后多久开始ping功能
ping_timeout时间30000msrtmp服务多久没有收到ping回复超时
cache_time时间0ms服务器端缓存多少时长的音视频数据,如果设置成0ms则没有秒开效果
low_latency布尔类型off只有在cache_time大于0时有效,当设置为on 服务器在收到新关键帧时会从新关键帧处下发数据
send_all布尔类型off只有在cache_time大于0时有效,当设置为on 服务器会将缓冲区中的数据一次性下发给客户端
fix_timestamp布尔类型off只有在cache_time大于0时有效,当设置为on 如果推流上来的时间戳出现回滚或者跳跃过大的情况则自动修复
zero_start布尔类型off只有在cache_time大于0时有效,当设置为on 播放端收到的码流中的时间戳值从0开始
max_streams整型32rtmp通道内最大传输的流个数,rtmp协议允许一个通道内传输多条流
chunk_size整型4096(单位:字节)rtmp传输时一个碎片的长度,值越小cpu消耗越大,值越大内存和延时消耗越大,建议使用默认值
max_message整型1048576(单位:字节)单个rtmp消息的最大长度,注意:如果传输大码率视频一个关键帧长度可能大于1MB,所以要根据真实场景调整该值
out_queue整型2048发送缓冲区允许缓存的最大帧数(包括视频和音频)
merge_frame整型1048576单次发送的最大帧数(无需修改此配置)
out_cork整型out_queue/8发送缓冲区中帧数到达该值后就开始丢帧,优先丢B帧、P帧
serverid字符型default该配置起到绑定不同域名的作用,当使用不同的域名访问同一个server区块下的服务时需要使用此配置
hevc_codecid整型12由于adobe已经停止升级rtmp和flv协议,所以原生的rtmp和flv是没有支持h265标准的,此配置是对rtmp和flv进行扩展,将编码id 12设置为h265编码,从而使服务器支持h265编码

rtmp服务配置

配置项参数类型默认值描述
live布尔类型offrtmp服务开关,必须配置成on才能开启rtmp服务
sync时间300ms当掉包导致时间不连续时,超过多少时间则重新发送音视频头,以使播放器重新开始计算时间
wait_key布尔类型off是否一定要等到关键帧才开始给播放端下发数据
wait_video布尔类型off是否一定要等到有视频帧才开始给播放端下发数据
publish_notify布尔类型off是否在收到rtmp的publish消息后给推流端回复消息
play_restart布尔类型off是否在收到rtmp的play/stop消息后给播放端回复消息
idle_streams布尔类型on当播放端请求的流不存在时是否依旧保持连接不断
drop_idle_publisher时间0s当没有播放端观看某一路流时,多久断开推流端的连接,默认0s代表永不主动断开

http-flv配置

开启http-flv配置的方式如下面的配置方法:
当location与application的名字不同时,需要其后跟 app=xxx 来把location与application绑定起来。如果location与application的名字相同,则无需app=xxx参数绑定。

rtmp推流地址:rtmp://ip/live0/stream-name
对应的http-flv播放地址:http://ip/live0/stream-name 和 http://ip/flv0/stream-name

rtmp推流地址:rtmp://ip/live1/stream-name
对应的http-flv播放地址:http://ip/live1/stream-name 和 http://ip/flv1/stream-name

通过这个配置你可以实现自定义的location名字,无需跟application名保持一致。

rtmp {
    server {
        listen 1935;
        application live0 {
            live on;
		}
		application live1 {
		    live on;
		}
    }
}

http {
    server {
        listen 80;
        location flv0 {
            flv_live 1935 app=live0;
        }
        location flv1 {
            flv_live 1935 app=live1;
        }
        location live0 {
            flv_live 1935;
        }
        location live1 {
            flv_live 1935;
        }
    }
}

http-ts服务配置

http-ts的配置方式和http-flv的配置原理完全相同。
rtmp推流地址:rtmp://ip/live0/stream-name
对应的http-ts播放地址:http://ip/live0/stream-name 和 http://ip/ts0/stream-name

rtmp推流地址:rtmp://ip/live1/stream-name
对应的http-ts播放地址:http://ip/live1/stream-name 和 http://ip/ts1/stream-name

rtmp {
    server {
        listen 1935;
        application live0 {
            live on;
		}
		application live1 {
		    live on;
		}
    }
}

http {
    server {
        listen 80;
        location ts0 {
            ts_live 1935 app=live0;
        }
        location ts1 {
            ts_live 1935 app=live1;
        }
        location live0 {
            ts_live 1935;
        }
        location live1 {
            ts_live 1935;
        }
    }
}

hls服务配置

配置项参数类型默认值描述
hls布尔类型offhls开关,on为开
hls_fragment时间5000ms单个ts文件切片的大小
hls_max_fragment时间hls_fragment*10单个ts文件切片的最大时长。hls切片的规则是尽量以hls_fragment为准,并且让每个ts文件尽量以关键帧开头,所以如果码流中迟迟没有关键帧,这个ts切片就会过大,hls_max_fragment就是为了防止切片过大存在的,当切片时长超过这个值就强制截断。
hls_path字符串ts切片和m3u8文件存放路径
hls_playlist_length时间30000mshls_playlist_length/hls_fragment 等于m3u8文件中记录的ts文件条数
hls_sync时间2ms在打包音频时,服务器会通过采样率计算音频时间戳,然后使用计算出来的时间戳进行打包。如果计算出来的时间戳和推送端推送过来的时间戳相差超过该值则使用推送来的时间戳打包。
hls_continuous布尔类型on如果hls_path目录下存在上次推流的残余文件,那么这次重新推流是否继续上次的残余文件更新m3u8,如果你非常在意推流端闪断后hls服务刷新带来的影响,请保持这个选项打开。
hls_nested布尔类型offoff时,服务器会将所有流生成的m3u8文件和ts文件放在hls_path指定的一级目录下。on时,服务器会在hls_path一级目录下生成一个以流名命名的目录,在流名命名的目录下生成m3u8文件和ts文件,而且m3u8文件会以index.m3u8命名。
hls_fragment_naming可选的字符串sequential此选项用来设置ts文件的命名规则,sequential:使用单调递增的序列号命名,timestamp:使用码流里的时间戳命名,system:使用系统时间戳命名
hls_fragment_slicing可选的字符串plain此选项用来配置切片规则,plain:当前正在生成的切片时长如果大于等于hls_max_fragment配置的时间则马上切片,否则要同时满足两个条件才会生成下一个切片,第一、ts文件时长大于等于hls_fragment配置的时间,第二、有新的关键帧产生。aligned:hls_max_fragment的影响,其余规则和plain配置下的切片规则一致
hls_type可选的字符串live此选项用来配置hls服务的类型,live:直播模式,m3u8文件实时删除旧的ts文件记录,同时追加新生产的ts文件记录。event:该模式下服务器不会删除m3u8文件中任何数据只会追加新的ts文件记录
hls_max_audio_delay时间300ms服务器在打包ts的音频数据的时候不会将独立的一帧音频内容打包成ts,而是会将n多分音频帧合在一起作为一个PES打包进ts文件中,这个值就是用来控制缓存多久的内容后封装为PES,然后打包进ts文件。
hls_audio_buffer_size整型数1048576同理hls_max_audio_delay,这个参数用来设置缓存音频的buffer大小
hls_cleanup布尔类型on这个参数用来控制是否实时删除过期的ts文件
hls_variant字符串此选项用来实现多码率的hls流,例如低码率的流名叫 xxx_low 并且码率是320000bps,高码率的叫 xxx_high 码率为9600000bps,则需要配置两条配置 hls_variant _low BANDWIDTH=320000; 和 hls_variant _high BANDWIDTH=960000; 那么在请求hls流的时候只需要请求http://ip/location/xxx.m3u8即可让播放器实现自动切片码率的功能
hls_base_url字符串如果你希望让播放器下载ts文件的时候使用与m3u8不同的域名可以通过这个来修改,例如不配置此项m3u8中ts记录为 xxx.ts,加了此项配置hls_base_url http://pingos.me/path; m3u8文件中ts记录则会变为 http://pingos.me/path/xxx.ts

录像服务

配置项参数类型默认值描述
live_record布尔类型off录像功能开关,开启后将在指定目录存储直播内容文件(ts格式)
live_record_path字符串录像根目录,将在该目录下生成ts文件
live_record_interval时间600000ms录制过程中重新打开索引文件和ts文件的时间间隔
live_record_min_fragment时间8000ms录制过程中索引文件里记录的最小分片大小
live_record_max_fragment时间12000ms录制过程中索引文件里记录的最大分片大小
live_record_buffer整型数1024*1024录制过程中数据缓冲大小

QQ交流群:697773082

Nginx是一个高性能的开源Web服务器,同时也可以用作反向代理服务器、负载均衡器和流媒体服务器。NginxRtmp-Module是一个第方模块,它为Nginx服务器添加了RTMP(Real-Time Messaging Protocol)支持,使其可以充当一个流媒体服务器。FFmpeg是一个跨平台的音视频处理工具,它可以用来进行多媒体文件的转码、编解码、录制和流媒体传输等操作。 引用中提到了使用Nginx Nginx-Rtmp-Module Ffmpeg搭建流媒体服务器的方法。具体配置可以查看conf/nginx.conf文件。首先需要解压文件,然后运行nginx_start.bat文件来启动Nginx服务器。这样就可以使用Nginx服务器提供的RTMP服务,通过FFmpeg推送一个RTMP流到Nginx,然后客户端可以通过访问Nginx来收看实时视频流。还可以使用HLSHTTP Live Streaming)协议,通过HTTP协议来访问Nginx服务器并收看视频流,但是FFmpeg推送流仍然是RTMP的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器服务器](https://blog.csdn.net/sinat_16643223/article/details/115108327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ffmpeg+nginx+nginx-rtmp-module搭建个人直播平台](https://download.csdn.net/download/qq_29114677/13012815)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值