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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

转载请注明出处: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

音视频/流媒体协议和编码汇总 是应用层协议,使用TCP作为底层传输协议,并提供了低延迟、高带宽利用率和实时性的特点。 (1)RTMP协议是Adobe的私有协议,未完全公开 (2)一般传输的是 flv,f4v 格式流都作用于OSI模型中的传输层。 RTCP是RTP的补充协议,用于提供对RTP会话的控制和监控。RTCP负责传输会话中的控制信息,包括发送者和接收者的统计信息、网络延迟、会话质量反馈等 SRTP是在RTP(Real-time Transport Protocol)的基础上添加了加密和认证机制,用于保护音频和视频数据的机密性和完整 阅读详情

相关推荐

nginx实现一个直播服务—RTMP推流和HTTP-FLV拉流

这篇文章主要记录用nginx实现直播服务,通过RTMP推流和通过HTTP-FLVRTMP拉流,并在页面中播放。

听海归雪的博客 1万+

nginx —— win下搭建nginx - hls服务,使用FFmpeg进行rtmp/http/m3u8推拉流(附跨域、延迟问题解决)

nginx —— win下搭建nginx - hls服务,使用FFmpeg进行rtmp/http/m3u8推拉流

2168

RTSP转Web直播:无插件低延迟方案与SRS+FFmpeg+flv.js实战

流媒体协议是音视频实时传输的技术基础,其核心原理在于通过特定的控制与传输协议实现媒体数据的连续推送。在安防监控、物联网和直播领域,RTSP协议因其稳定性和广泛设备支持而成为主流。然而,现代Web浏览器基于安全与性能考量,普遍不支持直接播放RTSP流,这构成了协议与平台间的技术鸿沟。为解决此问题,产生了‘协议转换’这一关键技术价值,即在服务器端将RTSP流转码或转封装为Web原生支持的格式(如HTTP-FLVHLS),从而打破壁垒,实现无插件播放。其典型应用场景包括智慧园区监控大屏、远程巡检和在线教育内容采

cuanmo8775的博客 508

流媒体传输协议HTTP-FLV、WebSocket-FLVHTTP-TS 和 WebSocket-TS的详细介绍、应用场景及对比

HTTP-FLV、WS-FLVHTTP-TS 和 WS-TS 是针对 FLVTS 格式视频流的不同传输方式。它们通过不同的协议实现视频流的传输,以满足不同的应用场景和需求。接下来我们对这些流媒体传输协议进行剖析。

大唐锦绣的博客 4150

常见推拉流客户端使用方式

1 rtmp推流 1.1 obs 1.1.1 obs采集摄像头 1.2 ffmpeg 1.2.1 ffmpeg读取文件推送 2 rtsp推流 2.1 ffmpeg 2.1.1 ffmpeg读取文件推流 3 rtmp拉流 3.1 vlc 3.2 ffmpeg 3.2.1 ffmpeg拉流保存文件 3.3 ffplay 3.4 mpv 3.5 srs提供的rtmp播放页面(基于adobe flash技术) 4 http-flvhttps-flv拉流 5 HLS(m3.

q191201771的专栏 6160

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

使用nginx-rtmp-module搭建http-flvrtmphlshttp-tshls+(内存切片或虚拟切片)直播服务器

impingo的博客 1万+

ffmpeg nginx flv_分布式直播系统(二)【搭建单点rtmp\http-flv\hls流媒体服务器】

声明转载请注明出处: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的基础上进...

weixin_39611049的博客 350

音视频开发真实路径:C++→Linux→FFmpeg→WebRTC四阶进阶

音视频开发是融合底层编程、操作系统、多媒体协议与实时通信的复合型工程能力。其核心建立在C++的内存与并发控制之上,依托Linux内核机制实现高效数据流转,通过FFmpeg统一抽象协议、算法与硬件加速层,最终由WebRTC定义端到端实时传输的分布式系统范式。掌握这四大技术栈的嵌套关系与演进逻辑,是解决直播卡顿、编解码延迟、硬件适配异常等真实问题的关键基础。本文聚焦音视频开发中C++内存安全、Linux内核级调优、FFmpeg源码改造及WebRTC深度定制四大实战维度,覆盖智能硬件、远程协作、云游戏等强实时场景

weixin_30619101的博客 343

3步安装http-flv/rtmp/hls/hls+/http-ts直播系统

3步搭建直播系统介绍新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 介绍 izaizhiqi 文章分布式直播...

impingo的博客 4154

[HLS]HTTP Live Streaming流与TS流比较

转自:http://www.cuplayer.com/player/PlayerCode/FMS/2013/0725/905_4.html 你说的应该是 HTTP Live Streaming [1] 吧。这个是 Apple 为了提高流播效率开发的技术,特点是将流媒体切分为若干 TS 片段(比如每10秒一段),然后通过一个扩展的 m3u 列表文件将这些 TS 片段集中起来供客户端播放器接收

haima1998的专栏 3959

ffmpeg测试推流http-ts

ffmpeg -re -i /home/share/3531d抓包.ts -c copy -listen 1 -f mpegts -content_type video/mp2t。直接使用vlc播放,vlc播放地址是http://192.168.20.67:8880/live/stream0。ffmpeg推流http-ts对应ffmpeg源码文件是libavformat/http.c。读取本地mp4文件推流http-ts。读取本地ts文件推流http-ts。使用wireshark抓包。

lililirururu的博客 316

使用nginx搭建rtmp+http_flv服务器实现直播推流

项目中要实现安卓手机上的直播功能,因为涉及网络安全,不允许使用第方的直播推流服务器,所以需要自建一台直播推流的视频服务器,将搭建过程记录如下。

shuaijie506的专栏 8609

使用vlc搭建http ts流服务器

学习http 视频ts流,首先得搭建一个好的调试环境,这里以window VLC客户端为例。 1、搭建视频ts服务器 2、使用视频ts客户端 3、使用wireshark数据分析

yuanbinquan的专栏 1万+

基于nginx-rtmp-module模块实现的HTTP-FLV直播模块nginx-http-flv-module(一)

本文后续的内容将在这里更新:《基于nginx-rtmp-module模块实现的HTTP-FLV直播模块nginx-http-flv-module(二)》。注意:下文的配置很多已经不能用了,因为现在的实现跟早期的实现相差有点大。而为了看到整个项目的变迁史,所以保留了下来,下文的更新中提到了为什么有些配置项不能再使用的原因。现在使用的配置可查找下文中的README.CN.md。另外,除非你...

winshining的专栏 6万+

搭建流媒体推流/拉流服务(RTMP/RTSP/HLS/HTTP-FLV

搭建流媒体服务,将rtsp或者rtmp视频流转换为H5可以直接播放的视频。用在直播、安防监控、视频点播、屏幕画面转播等

Stronger的博客 3万+

SRS支持的各种HTTP直播流(FLVTS、MP3、AAC)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34068198的博客 729

http-flv/http-ts/hls/hls+/rtsp/rtmp直播服务器用它一个就够了

转载请注明出处:https://blog.csdn.net/impingo 项目地址:https://github.com/im-pingo/pingos http-flv直播配置pingos服务器起源版本区别功能对比QQ交流群:697773082 pingos服务器起源 最初我目前所维护的nginx-rtmp-module是在AlexWoo的基础上进一步开发的。 在经过一些列功能迭代后,我独立维...

impingo的博客 4638

HTTP FLV交互流程及实例解析

HTTP FLV利用了一个HTTP的协议约定,http 的content-length头字段如果不存在,则客户端就会一直接收数据,直到HTTP连接断开为止,HTTP FLV传输流程是视频客户端发送HTTP请求,不带content-length头字段,服务器响应HTTP,并一直发送FLV的数据;HTTP FLV传输相比于fmp4阐述,是非常简单,既保证了实时性,又具有HTTP网络的适应性,当前很多直播和交互直播领域广泛应用

技术控的笔记 12万+

SRS rtmp http-flv流低延时设置、测试

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34138377的博客 1706
上一篇: 分布式直播系统(二)【搭建单点rtmp\http-flv\hls流媒体服务器】
下一篇: 分布式直播系统(四)【nginx-rtmp流媒体直播服务器单集群实现方式】
im-pingo
博客等级 码龄7年 304粉丝 45原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值