您现在的位置是:首页» windows系统» webrtc是什么协议,webrtc详细介绍

webrtc是什么协议,webrtc详细介绍

2024-07-13 01:52:20
本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。一. 前言WebRTC 提供了许多 example,本文介绍 peerconnection example 的使用与代码流程

本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。

一. 前言

WebRTC 提供了许多 example,本文介绍 peerconnection example 的使用与代码流程分析,通过该示例可以帮助理解 WebRTC 信令交互,媒体协商,音视频数据交互等流程。

该示例涉及两个角色:peerconnection_server,peerconnection_client。peerconnection_server 是一个信令服务器,它负责连接成员的管理以及信令交互与转发。peerconnection_client 是一个用于通话的客户端程序,它负责与信令服务器交互以及音视频的采集,编码,打包发送,接收,渲染。

二. peerconnection example 使用说明

1. 运行 peerconnection_server.exe,启动后界面如下。

2. 在机器 1 运行 peerconnection_client.exe,输入服务器 IP 和端口后点击 Connect,完成后页面如下,List Of currently connected peers 会显示其他已加入的 peer(此时还没有其他 peer 加入)。

3. 在机器 2 同样运行 peerconnection_client.exe,输入服务器 IP 和端口后点击 Connect,此时机器 1 和机器 2 上可以看到对端 peer。

4. 双击 peer,即可开启音视频通话。

三. peerconnection_server

peerconnection_server 是一个 select 模型的高并发服务器,它负责连接管理和信令消息中转,信令是使用 HTTP 短连接的方式,主要有 sign_in,message,wait,sign_out 信令,信令时序和作用如下所示。

信令 方法 含义 示例

sign_in

GET 登入

GET /sign_in?%s HTTP/1.0rnrn

message POST peerid发送消息给to

POST /message?peer_id=%i&to=%i HTTP/1.0rn

Content-Length: %zurn

Content-Type: text/plainrnrn

wait GET 等待消息

GET /wait?peer_id=%i HTTP/1.0rnrn

sign_out GET 退出登录

GET /sign_out?peer_id=%i HTTP/1.0rnrn

四. peerconnection_client

1. 类图关系介绍

peerconnection_client 是一个用于通话的客户端,核心类为 Conductor,它主要包含了 MainWindow 和 PeerConnectionClient 两个核心类对象(实际上它是一个中转调用的对象),前者是处理 Windows 窗口和消息的类,后者是与信令服务器交互的类,类关系图如下。

2. 程序时序图

a. 创建MainWnd,PeerConnectionClient,Conductor类对象

peerconnection_client 程序时序图如上所示,首先创建 MainWnd 对象,调用 MainWnd::Create 函数注册窗口类,然后创建窗口,显示窗口,接下来创建 PeerConnectionClient 对象,并使用 MainWnd 和 PeerConnectionClient 对象初始化 Conductor。

MainWnd 窗口创建的主要逻辑:RegisterWindowClass 注册窗口类和消息处理函数,CreateWindowExW 创建窗口,CreateChildWindows 创建子窗口,SwitchToConnectUI 切换到进行连接服务器的窗口页面。

GetMessage,wnd.PreTranslateMessage,TranslateMessage,DispatchMessage 是窗口消息获取,消息转换,消息分发的框架代码,有了它我们可以获取窗口的消息事件,并进行相应的回调操作。

b. 点击Connect连接信令服务器

当窗口捕捉到用户点击 Connect 按键的事件后调用 Conductor->StartLogin 函数,然后调用 PeerConnectionClient->Connect 函数连接信令服务器,Connect 函数是通过 DoConnect 创建 Socket 连接到信令服务器,并注册了 Socket 的回调处理函数。

成功连接后会给 peerconnection_server 发送 sign_in 信令请求登入,并且发送 wait 信令等待 peer_id 的消息。

c. 媒体协商

媒体协商步骤如上图所示,对于发起端用户首先需要初始化 PeerConnection 连接,然后 createOffer 将其设置到 localDescription 中并发送给被叫端,被叫端用户收到 offer sdp 后也初始化 PeerConnection 连接并将 offer sdp 设置成 remoteDescription,再 createAnswer 创建 answer sdp 并设置到 localDescription 并发送给发起端,发起端收到 answer sdp 后设置到 remoteDescription,至此媒体协商就完成了,下面说明 peerconnection example 中协商协商步骤的实现。

当有其他用户连接到 peerconnection_server 并且成功 sign_in,已加入的用户会收到新用户加入的状态通知(BroadcastChangedState)。

已加入的用户收到状态通知后会回调 Conductor::OnPeerConnected,执行该函数后会切换到连接用户列表,显示已连接用户。

当用户在连接列表双击对端用户时会回调 Conductor::ConnectToPeer,该函数执行 InitializePeerConnection 初始化 PeerConnection,然后 createOffer 创建 offer SDP 添加到 PeerConnection 的 localDescription,再把 offer sdp 信息发送给被叫方。(我们把发起呼叫的用户称为主叫方,另外一个用户称为被叫方)

被叫方用户接收 message 消息后执行 InitializePeerConnection 初始化 PeerConnection 连接和添加音视频轨的动作,并把 offer sdp 添加到 remoteDescription,再创建 answer sdp 添加到 PeerConnection localDescription 并把 answer sdp 发送给主叫方,主叫方收到 answer sdp 后将其添加到 PeerConnection localDescription 中。

d. PeerConnection说明

如下是创建 PeerConnection 的说明,首先通过 CreatePeerConnectionFactory 创建 PeerConnectionFactoryInterface 工厂对象,通过该对象可以创建 PeerConnectionInterface,LocalMediaStreamInterface,LocalAudio/VideoTrackInterface 等对象。

CreatePeerConnection 对象时传入 SDP 类型,配置是否使用 SRTP 以及 STUN 服务器地址等,PeerConnection 创建完成后需要把音视频轨添加到 PeerConnection 中,通过 CreateAudioTrack 创建音频轨,CreateVideoTrack 创建视频轨,通过 AddTrack 往 PeerConnection 添加轨,本地视频画面需要在本地窗口渲染显示,调用的是 main_wnd_->StartLocalRenderer。

e. ICE

ICE(Interactive Connectivity Establishment)称为交互式连接建立。

主叫和被叫想要通信首先需要知道对端的地址,如果主叫和被叫在同一内网环境,则可以使用内网地址进行通信,如果主叫和被叫不在同一内网环境,则需要通过 STUN 服务器获取自己 NAT 映射后的公网地址,将公网地址发送给对端,对端再进行连通性检查,因此主叫和被叫都需要收集自己的候选地址 candidate 并告知对端,如下是 ICE 候选者收集完成的回调函数。

本端收到对端候选者地址后通过 AddIceCandidate 添加到 PeerConnection,对端收到本端的候选者也是执行同样的流程,之后会再进行连通性检查。

f. 接收对端媒体流

媒体连通性检查完成后就开始发送媒体数据,当收到音视频数据后就回调 OnAddTrack 添加音视频轨,对于视频会调用 main_wnd_->StartRemoteRenderer(video_track) 开启渲染。

XTw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。

免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!

联系邮箱:773537036@qq.com