系列文章:
Nginx rtmp 推流(publish) 解析_fdsafwagdagadg6576的专栏-CSDN博客
Nginx rtmp 拉流播放(play)_fdsafwagdagadg6576的专栏-CSDN博客
Nginx rtmp 拉流(转发pull)_fdsafwagdagadg6576的专栏-CSDN博客
Nginx rtmp 转推_fdsafwagdagadg6576的专栏-CSDN博客
Nginx rtmp 点播流程_fdsafwagdagadg6576的专栏-CSDN博客
Nginx rtmp server有两种获得流的方式:push和pull方式;pull又分成静态或者非静态拉流.
Relay server有两个功能:拉流和转推。
Relay 场景=play 场景+publish场景+转推场景
对于上游是play,从上游拉流,发送play请求.建立信令连接.也就是向上游注册一个subscribe。
参见play篇
对于下游是publish,发送stream begin. 建立信令连接。下游已经注册成了subscribe,就是转流.
pull拉流之后,立刻做转推(根据config)。
handshake ,connect,createstream同publish,play
连接建立以后,liveav转流.
另一个分支:ngx_rtmp_relay_create_local_ctx-->ngx_rtmp_relay_push_reconnect仅仅是断开重连
流程图
静态pull和动态pull
静态pull,根据配置ip拉流即可. 详见参考引用。
动态pull先从业务服务器获取源站ip,下图是http-flv协议动态拉流,rtmp同理
源码分析
ngx_rtmp_relay_on_result {
...
if (ngx_rtmp_relay_send_play(s) != NGX_OK) {
return NGX_ERROR;
}
//pull流之后又转推 (转推一共两处,一处是接收推流之后,一处是pull之后.)
return ngx_rtmp_relay_publish_local(s);
}
QA:pull和play什么关系?
play是pull吗,应该有区别,中间的ngx_rtmp_relay_pull才是pull
pull 开始client handshake---connect---createstream---play
(动态pull,应该是类似aqy回源找到server)
play终端也得走上述过程。
参考:nginx_rtmp_relay_module模块解读 - 尚码园