4.4.1.7 设置配置
要设置配置,请运行以下步骤:
让配置成为要处理的 RTCConfiguration 字典。
让connection 成为目标 RTCPeerConnection 对象。
如果设置了 configuration.peerIdentity 且其值与目标的 peer identity 不同,则抛出 InvalidModificationError。
如果设置了 configuration.certificates 且证书集与构造连接时使用的证书集不同,则抛出 InvalidModificationError。
如果设置了 configuration.bundlePolicy 的值且其值与连接的捆绑策略不同,则抛出 InvalidModificationError。
如果设置了 configuration.rtcpMuxPolicy 的值且其值与连接的 rtcpMux 策略不同,则抛出 InvalidModificationError。如果值为“negotiate”且用户代理未实现非复用的 RTCP,则抛出 NotSupportedError。
如果设置了 configuration.iceCandidatePoolSize 的值并且其值与连接的先前设置的 iceCandidatePoolSize 不同,并且已经调用了 setLocalDescription,则抛出 InvalidModificationError。
将 ICE 代理的 ICE 传输设置设置为 configuration.iceTransportPolicy 的值。如[JSEP](第4.1.16节)中所定义,如果新的 ICE 传输设置更改了现有设置,则在下一个收集阶段之前不会采取任何操作。如果脚本希望立即发生这种情况,则应该重新启动 ICE。
将[JSEP](第3.5.4节和第4.1.1节中)中定义的 ICE 代理的预取ICE候选池大小设置为 configuration.iceCandidatePoolSize 的值。如果新的 ICE 候选池大小改变了现有设置,则可能导致立即收集新候选池里的候选者,或丢弃现有的池里的候选者,如[JSEP](第4.1.16节)中所定义。
让 validatedServers 为空列表。
如果定义了 configuration.iceServers,则对每个元素运行以下步骤:
让 server 成为当前的列表元素。
让 urls 为 server.urls。
如果 url 是一个字符串,请将 url 设置为仅包含该字符串的列表。
如果 url 为空,则抛出一个 SyntaxError。
对于 urls 中的每个 url,请执行以下步骤:
使用[RFC3986]中定义的通用 URI 语法解析 URL 并获取方案名称。如果基于[RFC3986]中定义的语法的解析失败,则抛出一个 SyntaxError。如果浏览器未实现方案名称,则抛出 NotSupportedError。如果方案名称是 turn 或 turns,并且使用[RFC7064]中定义的语法解析 URL 失败,则抛出一个 SyntaxError。如果方案名称是 stun 或 stuns,并且使用[RFC7065]中定义的语法解析url失败,则抛出一个 SyntaxError。
如果方案名称是 turn 或 turns ,并且省略了 server.username 或 server.credential,则抛出 InvalidAccessError。
如果方案名称是turn或turn,并且 server.credentialType 是“password”,而 server.credential 不是 DOMString,则抛出 InvalidAccessError。
如果方案名称是 turn 或 turns ,server.credentialType 是 “oauth”,而 server.credential 不是 RTCOAuthCredential,则抛出 InvalidAccessError。
将 server 附加到validatedServers。
让 validatedServers 成为 ICE 代理的 ICE服务器列表。
如[JSEP](第4.1.16节)中所定义,如果新的服务器列表替换ICE代理的现有ICE服务器列表,则在下一个收集阶段之前不会采取任何操作。如果脚本希望立即发生这种情况,则应该重新启动ICE。但是,如果ICE候选池具有非零大小,则将丢弃任何现有池化候选者,并且将从新服务器收集新候选者。
将配置存储在[[Configuration]]值中。