转推

描述

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

利用回源转推功能可以帮你快速实现上面这个结构。
请仔细阅读回源转推文档。

转推类型

  • 定向转推:媒体服务器通过配置文件加载源站地址,收到推流请求(publish)时向目的服务器转推。
  • 动态转推:媒体服务器触发on_push事件,通过on_push查询结果获取目的服务器地址,然后向目的服务器转推。 (:.success)

转推协议

  • rtmp:pushon_push配置目前仅支持rtmp协议转推,如果希望支持其他转推协议请参考exec配置。

配置

定向转推

注意:定向转推任务不会在worker进程启动时触发,只有在服务器接收到推流请求(publish)才会被触发。

push

Syntax: push [url] domain=[domain] app=[app] name=[name] pargs=[pargs] referer=[referer] user_agent=[user_agent]
Default: -
Context: rtmp, server, application

push的设计思路和pull的非常相似,如果你已经理解了pull的配置方法那么就能很快理解push的操作。

  • Desc
  • url: 目前只支持rtmp地址。同pull配置一样,url参数只需配置地址,如:push rtmp://live.pingos.io;
  • domain: 域名,如果配置此项参数,转推请求中将会使用这个域名替换原url中的地址部分。
  • app: 挂载点名,如果配置此项参数,转推请求中将会使用这个挂载点名拼接到url中的挂载点位置;如果不配置此项参数,则从publish请求中提取application(挂载点),然后拼接到url的application位置。
  • name: 流名,如果配置此项参数,转推请求中将会使用这个流名拼接到url中的流名部分;如果不配置此项参数,则从publish请求中提取name(流名),然后拼接到url的流名位置。
  • pargs: 附加参数,如果配置此项参数,转推请求中将会把pargs的值拼接在url的尾部,将其作为url参数的一部分。
  • referer: 此参数将会赋值给rtmp转推请求中的pageUrl。
  • user_agent: 此项参数的值将会赋值给rtmp转推请求中的flashVer。

注意:如果配置文件中缺省 domain、app、name、pargs、referer、user_agent中的一项或多项参数,服务器会从触发push任务的publish请求中提取相关参数用来初始化push任务。换句话说如果你只配置转推IP,那么app和name都将从publish的参数中获取。

  • For example

      rtmp {
          server {
              listen 1935;
              application live {
                  live on;
                  # push rtmp://122.51.177.240 domain=live.pingos.io; # 设置转推请求中的host,application(挂载点)和name(流名)从publish请求中提取。
                  push rtmp://122.51.177.240 domain=live.pingos.io app=live; # 设置转推请求中的host和application(挂载点)。name(流名)从publish请求中提取。
                  #push rtmp://122.51.177.240 domain=live.pingos.io app=live name=ice; # 无论你请求什么流名的流,服务器转推出去的流名都是ice,请不要这样配置。
              }
          }
      }
    

动态转推

动态转推是指,通过on_push事件从你的业务服务器获取转推地址的操作。
动态转推是一种更灵活的转推方案,能够有效解决你对集群化部署的要求。
关于on_push的详细配置说明请参考on_push文档

on_push

Syntax: on_push 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_push http://live.pingo.io:8088/notify stage=start,update,done args=pargs;
              }
          }
      }
    

使用域名

如果你希望在pushon_push返回结果中使用域名,请参考动态DNS文档