Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4|回复: 4
打印 上一主题 下一主题

 webrtc结构简析

[复制链接]

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
跳转到指定楼层
楼主
发表于 2016-7-21 18:06:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
网址:http://www.2cto.com/kf/201603/496552.html

开始:
WebRTC可以进行p2p之间的通信,但是仍需要服务支持.
1. signaling服务: 客户端之间交换元数据来建立通信.
2. 穿透NATs和防火墙.
在本文中,我们向你展示如何构建一个signaling服务,如何用STUN/TURN服务去做NATs穿透.另外,解释WebRTC是如何进行多端通话的.以及如何利用VoIP/PSTN 建立通话.

回复

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
沙发
 楼主| 发表于 2016-7-21 18:15:59 | 只看该作者
什么是信令服务(Signaling)?

信令是在协调沟通的过程,为了让WebRTC应用程序建立一个”通话”,客户端之间要交换信令信息:

打开或关闭一个会话的控制信息错误信息媒体源数据,比如编码解码设置,带宽和媒体类型关键数据,用于建立安全连接网络数据,例如主机地址和端口.

信令服务是一个在客户端间来回传递信息的机制.这个机制没有在WebRTC中实现,需要我们自己创建它们.在说明几种创建信令方法之前,先交代一下背景.




回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
板凳
 楼主| 发表于 2016-7-21 18:17:27 | 只看该作者
本帖最后由 zangcf 于 2016-7-21 18:21 编辑

为了避免冗余数据和保持最大的兼容性.在建立信令时WebRTC没有指定一个标准的协议.
WebRTC设计思想是在完全控制媒体层部分,让信令层尽量脱离应用,因为很可能不同的应用在使用不同的协议.在这种模式下,需要交换的关键信息是多媒体的会话描述,它指定了必要的运输和媒体配置信息. JSEP结构也避免了让浏览器保存状态信息,防止每次页面重载,信令就会丢失. 所以把信令状态保存到服务器中.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
地板
 楼主| 发表于 2016-7-21 18:22:33 | 只看该作者
JSEP协议要求客户端之间需要交换offer和answer: 上面提到的媒体源数据,offer和answer遵守会话描述协议(SDP)进行交流.如下:
<code class="hljs ini">v=0
o=- 7614219274584779017 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video
a=msid-semantic: WMS
m=audio 1 RTP/SAVPF 111 103 104 0 8 107 106 105 13 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:W2TGCZw2NZHuwlnf
a=ice-pwd:xdQEccP40E+P0L5qTyzDgfmW
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=mid:audio
a=rtcp-mux
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:9c1AHz27dZ9xPI91YNfSlI67/EMkjHHIHORiClQe
a=rtpmap:111 opus/48000/2</code>
如果想了解SDP,可以查看IETF examples.
WebRTC这样设计是为了让offer和answer端能够在调整之前通过SDP协议设置好本地或远程描述. 例如: preferAudioCodec()方法用来设置默认编解码方式和比特.虽然SDP在JavaScript中难操作,以后可能用JSON代替,但是还是有一些优势的.
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
5#
 楼主| 发表于 2016-7-21 18:23:11 | 只看该作者
RTCPeerConnection + 信令: offer, answer and candidate

RTCPeerConnection是WebRTC客户端之间建立音视频通信的API.
初始化RTCPeerConnection需要两个步骤:

确定本地媒体条件,如:分辨率,编解码方式.这些是offer和answer所需的原始数据. 获得潜在应用的主机地址,即candidate.
一旦本地数据确定,就必须通过信令机制与远端进行对等交换.
假设Alice呼叫Eve.下面详细描述offer/answer机制.

Alice创建一个RTCPeerConnection对象, Alice用此对象的createrOffer()创建一个offer.并调用setLocalDescription()设置本地描述offer.(如:分辨率和编解码方式) Alice把offer通过信令机制发送给Eva. Eva调用setRemoteDescription()方法传入offer,来告诉她的PeerConnection对象远端Alice的配置描述. 之后Eva会调用creatAnswer(),如果成功就会返回一个对应的本地session描述,即answer.(如果不成功,表示Eva没有Alice的offer对应的本地设置) Eva根据生成的answer通过setLocalDescription()设置本地的描述. 然后用信令机制发送序列化后的answer返回给Alice. Alice根据Eva的answer调用setRemoteDescription()设置对方的描述.
至此,Alice和Eva都设置了本地及对方的描述,
接下来还需要交换网络信息.”finding candidates”是指用ICE framework寻找网络接口和端口的过程:

Alice用onlceCandidate handler 创建一个RTCPeerConnection对象. 当网络candidates有效时这个handler会被调用. 在这个handler里,Alice通过信令机制发送序列化的candidates数据给Eva. 当Eva从Alice获得candidate信息,她会调用addIceCandidate()去给对方描述添加candidate.
JSEP 支持ICE Candidate Trickling(允许呼叫者在首次初始化offer后,可以逐步发送candidate给被呼叫者,这样让被呼叫者可以马上开始设置连接,而不用等到所有candidates到达)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, 2025-12-15 02:03 , Processed in 0.012724 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表