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

在 owt 里面 webrtc-agent 负责 webrtc 连接的生命周期管理,提供 webrtc 接入服务。

webrtc 入会流程

入会

MCU混屏
1. 申请入会
    1. 【获取token】client 通过 management-api rest 接口得到入会 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 混屏

如果开启了 video-agent 节点,则服务端具备 MCU 混屏能力

    1. 【API请求】client 调用 management-api rest 发送混屏请求
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. 【转发 RTP数据】management-api 转发请求到 conference-agent.controlStream,稍作整理后告诉 webrtc 转发 streamId 对应的 rtp 数据(webrtc 使用 rtp 格式传输媒体数据)到相应的 video-agent
      具体流程:
    • 通知对应的 webrtc-agent 创建一个 InternalOut 对象(owt 节点间收发数据的机制),并调用 webrtc-agent.subscribe 订阅 streamId 流到 该 InternalOut
    • 通知对应的 video-agent 创建一个 InternalIn 对象,并调用 video-agent.publish 从该 InternalIn 接收数据
    • 调用对应的 webrtc-agent.linkup 让 InternalOut 的数据流向 InternalIn
    • 至此 webrtc-agent 的 rtp 数据将会转发到 video-agent
      (refs: https://github.com/open-webrtc-toolkit/owt-server/blob/5b7dda5c098f7803ab8934ec66a1dd1b48856e9f/source/agent/conference/roomController.js#L537)
      (注:5.x 使用 InternalIO 点对点方式传输 Internal 数据,之后修改了 InternalIO 的连接流程,改用 Server-Client 方式)
4. 播放

client 可以选择订阅服务端的 RTP 数据流(例如,混屏流和 webrtc publish 上来的流)

    1. 【发送 subscribe 消息】 client 通过 socket.io 发送 subscribe 消息,附带 streamId 参数来请求订阅对应的流,subscribe 消息会转发到 conference-agent
      streamId 列表可以通过 management-api rest 接口获取
    1. 【混屏流转发到 webrtc-agent】 conference-agent 收到 subscribe 消息后,如果 streamId 是混屏流,则通知 video-agent 转发 rtp 数据到 webrtc-agent
      使用 video-agent.generate 生成一个输出流,并使用 InternalIn,InternalOut,linkup的操作转发数据,类似 webrtc-agent 转发数据到 video-agent的流程
    1. 【webrtc 流程】整个订阅流程与 publish 类似,最后 webrtc-agent 会收到 subscribe 消息并生成 erizo::WebRtcConnection 对象与客户端建立连接
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容