Skip to content

简介

固定回源模式 :是指在配置文件中配置好源站的url,协议等信息进行回源,还有其他方式,例如:可以先去查询中心节点获取到源地址,然后回源,或者从本地文件中读取一个flv文件输出也算一种。

  • 回源作用:CDN边缘节点通过RTMP/HTTP-FLV回源拉取流数据,确保内容快速同步到全球节点,减少终端用户延迟。
  • 支持协议:目前mms-server支持RTMP和HTTP-FLV两种回源协议。
  • 回源状态传递: 回源时,如果源站返回http的404,403,500等错误,或者rtmp的NetConnection.Connect.Rejected或者NotFound,也会传递给客户端,而不是卡住等超时

配置

  1. 首先需要在推流域名test.publish.com.yaml中,配置一个回源
yaml
type: publish
name: test.publish.com
apps:
  - name: app 
    origin_pull:
      enabled: true
      protocol: http-flv
      url: http://zlm.com:8080/${app}/${stream_name}.flv

测试方法

  • 可以将流推送到srs或者zlmediakit等其他开源服务器,然后填写其他服务器的拉流播放地址进行测试
  • 配置说明: ${app}和${stream_name}为占位符号,类似printf中的%s,%d,会被替换成请求播放的app和流名称,可以参考鉴权中的说明
  • protocol:表示回源的协议,可以是http-flv或者rtmp,可自行扩展假如其他如quic协议等
  • url:回源的url,会将占位符替换后生成一个实际url
  1. 如果需要使用rtmp播放,那么可以配置桥,使能rtmp到flv转换
yaml
type: publish
name: test.publish.com
apps:
  - name: app                   #接入点名称
    hls:                        # 切片配置
      ts_min_seg_dur: 2000      # 2000ms,默认2000ms,单位ms
      ts_max_seg_dur: 6000      # 6000ms就必须切片,默认6000ms,单位ms
      ts_max_bytes: 2m          # 最大2m,默认2M,单位支持k/m
      min_ts_count_for_m3u8: 3  # 3个就可以输出m3u8,默认3
    origin_pull:
      enabled: true
      protocol: http-flv
      url: http://test.play.com:8080/${app}/${stream_name}.flv
    bridge:                       # 转协议配置
      no_players_timeout_ms: 10s  # 多少时间无人播放,转协议结束
      flv:
        to_rtmp: on             # 使能flv转rtmp
        to_hls: on              # 使能flv转hls

推流

使用obs将流推送的zlmediakit等其他开源服务器

播放

使用ffplay播放

shell
ffplay http://test.play.com:8080/app/test.flv

服务器收到请求后,将请求http://zlm.com/app/test.flv回源flv数据

鉴权生成

对于直播播放,大部分时候都需要做防盗链,特别是对一些重要的直播内容,这时候一般会对播放的url做鉴权,鉴权需要按照一定的规则来生成sign签名,以保证链接的不可伪造性。 mms-server提供了非常灵活的鉴权生成方式,关于鉴权参数生成的一些概念参考鉴权描述的鉴权配置说明。 同样适用于回源时的鉴权生成,其实就是生成回源的url,下面是示例:

yaml
type: publish
name: test.publish.com
apps:
  - name: app                   #接入点名称
    origin_pull:
      enabled: true
      protocol: http-flv
      params:
        time: get_time()
        sign: md5_upper(sys@test.publish.com/${domain}/${app}/${stream_name}/${params[time]})
      url: http://test.publish.com:8080/${app}/${stream_name}.flv?time=${params[time]}&sign=${params[sign]}

这个其实比较好理解,params就是计算生成一些自定义参数,url里面的占位符用相应的值做替换,这里就不啰嗦,应该都会看得懂的。

安全协议支持

如果url填写的是https/rtmps开头,那么会使用https/rtmps来拉取。

Released under the MIT License.