简介
固定回源模式 :是指在配置文件中配置好源站的url,协议等信息进行回源,还有其他方式,例如:可以先去查询中心节点获取到源地址,然后回源,或者从本地文件中读取一个flv文件输出也算一种。
- 回源作用:CDN边缘节点通过RTMP/HTTP-FLV回源拉取流数据,确保内容快速同步到全球节点,减少终端用户延迟。
- 支持协议:目前mms-server支持RTMP和HTTP-FLV两种回源协议。
- 回源状态传递: 回源时,如果源站返回http的404,403,500等错误,或者rtmp的NetConnection.Connect.Rejected或者NotFound,也会传递给客户端,而不是卡住等超时
配置
- 首先需要在推流域名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
- 如果需要使用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来拉取。