天天看點

Nginx rtmp 拉流播放(play)

系列文章:

Nginx rtmp 推流(publish) 解析_fdsafwagdagadg6576的專欄-CSDN部落格

Nginx rtmp 拉流播放(play)_fdsafwagdagadg6576的專欄-CSDN部落格

Nginx rtmp 拉流(轉發pull)_fdsafwagdagadg6576的專欄-CSDN部落格

Nginx rtmp 轉推_fdsafwagdagadg6576的專欄-CSDN部落格

Nginx rtmp 點播流程_fdsafwagdagadg6576的專欄-CSDN部落格

終端play拉流分成兩種場景:

Nginx rtmp server有流場景和沒流場景.

  • 有流場景:終端play在nginx rtmp server上注冊作為subscribe,也就是在subscribes數組中添加一項。這就是拉流的原理,即注冊成為subscribe,這樣就可以接收流了
  • 沒流:先拉流,然後注冊成為subscribe,接收流. 拉流部分參見relay 拉流(pull)篇

整體結構圖

Nginx rtmp 拉流播放(play)
Nginx rtmp 拉流播放(play)

流程圖:

Nginx rtmp 拉流播放(play)

流程步驟:

1) handshake,connect,createstream和publish場景一樣.ngx_rtmp_recv消息接收也一樣.

2) 發送play消息

3) ngx_rtmp_live_join 注冊作為subscribe接收,本地liveav發的流

4)  流媒體ngx_rtmp_live_av轉流

綠色子產品參見relay 拉流(pull)篇

源碼分析

static ngx_int_t
ngx_rtmp_live_play(ngx_rtmp_session_t *s, ngx_rtmp_play_t *v)
{
    ....
    /* join stream as subscriber */
//把上遊rtmp伺服器的session加入到這個流的訂閱者中去
//參數3決定0 is subscriber
    ngx_rtmp_live_join(s, v->name, 0);
    ....
next:
    return next_play(s, v);
}
           

如果對您有所幫助,請随手點贊,謝謝