描述
graph LR;
pub0[推流端]
pub1[推流端]
sp0(收流服务器集群0)
sp1(收流服务器集群1)
sc((核心服务器集群))
sr(录像服务器集群)
se0(边缘服务器集群0)
se1(边缘服务器集群1)
pl0[拉流端0]
pl1[拉流端1]
pl2[拉流端2]
pl3[拉流端3]
pub0--推流-->sp0
pub1--推流-->sp1
sp0--转推-->sc
sp1--转推-->sc
sc--回源拉流-->se0
sc--回源拉流-->se1
sc--转推-->sr
se0--拉流播放-->pl0
se0--拉流播放-->pl1
se1--拉流播放-->pl2
se1--拉流播放-->pl3
利用回源
和转推
功能可以帮你快速实现上面这个结构。
请仔细阅读回源和转推文档。
回源类型
回源协议
- http-flv:媒体服务器支持从源站拉取http-flv流。
- rtmp:媒体服务器支持从源站拉取rtmp流。
配置
定向回源
注意:定向回源任务不会在worker进程启动时触发,只有在服务器接收到拉流请求(play)并且无相应流时才会被触发,换句话说如果play请求的流名已经存在,则也不会再触发pull任务。
pull
Syntax: pull [url] domain=[domain] app=[app] name=[name] pargs=[pargs] referer=[referer] user_agent=[user_agent]
Default: -
Context: rtmp, server, application
- Desc
- url: 可以是http-flv地址,也可以是rtmp地址,并且url只需配置到地址部分,如:
pull rtmp://live.pingos.io;
或者pull http://live.pingos.io;
。- domain: 域名,如果配置此项参数,回源请求中将会使用这个域名替换原url中的地址部分。
- app: 挂载点名,如果配置此项参数,回源请求中将会使用这个挂载点名拼接到url中的挂载点部分;如果不配置此项则提取触发pull任务的play请求中的application名拼接到url的挂载点部分。
- name: 流名,如果配置此项参数,回源请求中将会使用这个流名拼接到url中的流名部分;如果不配置此项则提取触发pull任务的play请求中的流名拼接到url的流名部分。
- pargs: 附加参数,如果配置此项参数,回源请求中将会把pargs的值拼接在url的尾部;将其作为url参数的一部分。
- referer: 如果url是rtmp地址,则此项参数的值将会赋值给rtmp请求中的pageUrl;如果url是http-flv地址,则此项参数的值将会赋值给http请求中的Referer参数。
- user_agent: 如果url是rtmp地址,则此项参数的值将会赋值给rtmp请求中的flashVer;如果url是http-flv地址,则此项参数的值将会赋值给http请求中的User_Agent参数。
注意:如果配置文件中缺省 domain、app、name、pargs、referer、user_agent中的一项或多项参数,服务器会从触发pull任务的play请求中提取相关参数用来初始化pull任务。换句话说如果你只配置回源IP,那么app和name都将从play的参数中获取,这样就能灵活地从源站拉取不同的直播流了。
-
For example
rtmp { server { listen 1935; application live { live on; # pull rtmp://122.51.177.240 domain=live.pingos.io; # 设置回源请求中的host,application(挂载点)和name(流名)从play请求中提取。 pull rtmp://122.51.177.240 domain=live.pingos.io app=live; # 等价于 设置回源请求中的host和application(挂载点)。name(流名)从play请求中提取。 #pull rtmp://122.51.177.240 domain=live.pingos.io app=live name=ice; # 无论你请求什么流名的流,服务器都只回源流名为ice的流。 } } }
动态回源
动态回源
是指,通过on_pull
事件从你的业务服务器获取回源地址的操作。
是一种更灵活的转推方案,能够有效解决你对集群化部署的要求。
关于on_pull
的详细配置说明请参考on_pull文档
on_pull
Syntax: on_pull url [args=string] [stage=[start][,update][,done]] [timeout=time] [update=time];
Default: -
Context: application
- For example
rtmp { server { listen 1935; application live { live on; on_pull http://live.pingo.io:8088/notify stage=start,update,done args=pargs; } } }
使用域名
如果你希望在pull
或on_pull
返回结果中使用域名,请参考动态DNS文档