Nginx rtmp Relay拉流(转发pull)

系列文章
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仅仅是断开重连

流程图

image

静态pull和动态pull

静态pull,根据配置ip拉流即可. 详见参考引用。
动态pull先从业务服务器获取源站ip,下图是http-flv协议动态拉流,rtmp同理

image

源码分析

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模块解读 - 尚码园

如果对您有所帮助,请随手点赞,谢谢

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容