【速成】OWT webrtc-agent 流程詳解

在 owt 里面 webrtc-agent 負(fù)責(zé) webrtc 連接的生命周期管理,提供 webrtc 接入服務(wù)。

webrtc 入會(huì)流程

入會(huì)

MCU混屏
1. 申請(qǐng)入會(huì)
    1. 【獲取token】client 通過(guò) management-api rest 接口得到入會(huì) token
POST ${host}/v1/rooms/{roomId}/tokens

(refs: https://github.com/open-webrtc-toolkit/owt-server/blob/5b7dda5c098f7803ab8934ec66a1dd1b48856e9f/source/management_api/resource/v1/index.js#L70)

2. 建立 webrtc 連接
3. MCU 混屏

如果開(kāi)啟了 video-agent 節(jié)點(diǎn),則服務(wù)端具備 MCU 混屏能力

    1. 【API請(qǐng)求】client 調(diào)用 management-api rest 發(fā)送混屏請(qǐng)求
PATCH ${host}/v1.1/rooms/{roomId}/streams/{streamId}
{
    op: "add",
    path: "/info/inViews",
    value: string(viewLabel)
}

(refs: https://github.com/open-webrtc-toolkit/owt-server/blob/5b7dda5c098f7803ab8934ec66a1dd1b48856e9f/source/management_api/resource/v1/streamsResource.js#L57)

    1. 【轉(zhuǎn)發(fā) RTP數(shù)據(jù)】management-api 轉(zhuǎn)發(fā)請(qǐng)求到 conference-agent.controlStream,稍作整理后告訴 webrtc 轉(zhuǎn)發(fā) streamId 對(duì)應(yīng)的 rtp 數(shù)據(jù)(webrtc 使用 rtp 格式傳輸媒體數(shù)據(jù))到相應(yīng)的 video-agent
      具體流程:
    • 通知對(duì)應(yīng)的 webrtc-agent 創(chuàng)建一個(gè) InternalOut 對(duì)象(owt 節(jié)點(diǎn)間收發(fā)數(shù)據(jù)的機(jī)制),并調(diào)用 webrtc-agent.subscribe 訂閱 streamId 流到 該 InternalOut
    • 通知對(duì)應(yīng)的 video-agent 創(chuàng)建一個(gè) InternalIn 對(duì)象,并調(diào)用 video-agent.publish 從該 InternalIn 接收數(shù)據(jù)
    • 調(diào)用對(duì)應(yīng)的 webrtc-agent.linkup 讓 InternalOut 的數(shù)據(jù)流向 InternalIn
    • 至此 webrtc-agent 的 rtp 數(shù)據(jù)將會(huì)轉(zhuǎn)發(fā)到 video-agent
      (refs: https://github.com/open-webrtc-toolkit/owt-server/blob/5b7dda5c098f7803ab8934ec66a1dd1b48856e9f/source/agent/conference/roomController.js#L537)
      (注:5.x 使用 InternalIO 點(diǎn)對(duì)點(diǎn)方式傳輸 Internal 數(shù)據(jù),之后修改了 InternalIO 的連接流程,改用 Server-Client 方式)
4. 播放

client 可以選擇訂閱服務(wù)端的 RTP 數(shù)據(jù)流(例如,混屏流和 webrtc publish 上來(lái)的流)

    1. 【發(fā)送 subscribe 消息】 client 通過(guò) socket.io 發(fā)送 subscribe 消息,附帶 streamId 參數(shù)來(lái)請(qǐng)求訂閱對(duì)應(yīng)的流,subscribe 消息會(huì)轉(zhuǎn)發(fā)到 conference-agent
      streamId 列表可以通過(guò) management-api rest 接口獲取
    1. 【混屏流轉(zhuǎn)發(fā)到 webrtc-agent】 conference-agent 收到 subscribe 消息后,如果 streamId 是混屏流,則通知 video-agent 轉(zhuǎn)發(fā) rtp 數(shù)據(jù)到 webrtc-agent
      使用 video-agent.generate 生成一個(gè)輸出流,并使用 InternalIn,InternalOut,linkup的操作轉(zhuǎn)發(fā)數(shù)據(jù),類似 webrtc-agent 轉(zhuǎn)發(fā)數(shù)據(jù)到 video-agent的流程
    1. 【webrtc 流程】整個(gè)訂閱流程與 publish 類似,最后 webrtc-agent 會(huì)收到 subscribe 消息并生成 erizo::WebRtcConnection 對(duì)象與客戶端建立連接
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容