WebRTC ICE 传输层
作者:追风剑情 发布于:2024-2-4 14:19 分类:Unity3d
RTCIceTransport 接口定义了收发数据包的P2P传输通道,当需要获取 ICE 连接状态信息时,通过该接口进行访问。
当调用 setLocalDescription() 或 setRemoteDescription()方法时,WebRTC自动创建 RTCIceTransport 对象,对象中的ICE 代理(ICE Agent)负责管理 ICE 的连接状态。
//RTCIceTransport的定义
interface RTCIceTransport : EventTarget {
readonly attribute RTCIceRole role;
readonly attribute RTCIceComponent component;
readonly attribute RTCIceTransportState state;
readonly attribute RrCIceGathererstate gatheringState;
sequence<RTCIceCandidate> getLocalCandidates();
sequence<RTCIceCandidate> getRemoteCandidates();
RTCIceCandidatePair? getSelectedCandidatePair();
RTCIceParameters? getLocalParameters();
RTCIceParameters? getRemoteParameters();
attribute EventHandler onstatechange;
attribute EventHandler ongatheringstatechange;
attribute EventHandler onselectedcandidatepairchange;
};
RTCIceTransport 属性
1.role 只读
//RTCIceRole的定义
enum RTCIceRole {
"unknown",
"controlling",
"controlled"
};
RTCIceRole 枚举值说明 | |
枚举值 | 说明 |
unknown | ICE代理的角色还没有确定 |
controlling | ICE 控制代理 |
controlled | ICE 受控代理 |
ICE 区分不同角色,帮助协商过程顺利完成。
2.component 只读
该属性返回当前对象使用的传输协议,类型为 RTCIceComponent。
//RTClceComponent的定义
enum RTCIceComponent {
"rtp",
"rtcp"
};
RTCIceComponent 枚举值说明 | |
枚举值 | 说明 |
rtp | 当前对象使用的 RTP 协议 |
rtcp | 当前对象使用的 RTCP 协议 |
3.state 只读
该属性表示ICE传输状态,类型为 RTCIceTransportState。
//RTCIceTransportState的定义
enum RTCIceTransportState {
"new",
"checking",
"connected",
"completed",
"disconnected",
"failed",
"closed"
};
RTCIceTransportState 枚举值说明 | |
枚举值 | 枚举值说明 |
new | RTClceTransport正在收集候选地址,或者正在等待对等端返回ICE候选者地址 |
checking | RTCIceTransport 收到了对等端返回的ICE候选者地址,正在进行配对 |
connected | RTCIceTransport 找到了一条可用的网络连接。为了找到一个更优的网络路径RTCIceTransport仍然会继续进行ICE候选者地址收集和配对 |
completed | RTCIceTransport结束了ICE候选者地址的收集,并从对等端收到没有更多ICE 候选者地址的指令,最终执行配对过程,成功找到了可用的网络连接 |
disconnected | RTCIceTransport网络连接中断,这是一个可恢复的短暂状态,在弱网环境可能会频繁触发 |
failed |
RTCIceTransport完成了ICE候选者收集,但是因为没有成功连通的候选者对导致配对失败。 除非ICE重启,否则该状态不会恢复,同时该状态不会导致DTLS传输层关闭。 |
closed | RTCIceTransport 对象已关闭,不再响应 STUN 请求。 |
4.gatheringState 只读
该属性表示ICE候选者的收集状态,类型为 RTCIceGathererState。
//RTCIceGathererState 的定义
enum RTCIceGathererState {
"new",
"gathering",
"complete"
};
RTCIceGathererState 属性说明 | |
枚举值 | 枚举值说明 |
new | 刚刚创建 RTCIceTransport,还没有开始收集ICE候选者信息 |
gathering | RTCIceTransport 正在收集ICE候选者信息 |
complete | RTCIceTranspont 完成了ICE候选者信息的收集,已经向对等端发送了ICE候选者结束标识 |
RTCIceTransport 方法
1.getLocalCandidates() 方法
该方法返回本地ICE候选组。ICE代理将收集到的新的ICE候选项放入候选组,同时触发事件 RTCPeerConnection:icecandidate。
localCandidates = RTCIceTransport.getLocalcandidates();
参数:无。
返回值:包含 RTCIceCandidate 对象的数组。每个 RTCIceCandidate 对象代表一个本地 ICE 候选项。
//getLocalCandidates()方法示例
const localCandidates = pc.getSenders()[0].transport.iceTransport.getLocalCandidates();
localCandidates.forEach((candidate, index) => {
console.log("Candidate " + index + ":" + candidate.candidate);
});
2.getRemoteCandidates()方法
该方法返回对等端ICE候选组。
当本地应用程序调用 RTCPeerConnection.addIceCandidate()方法将对等端候选项加入ICE 会话时,调用该方法可获得包含此候选项的数组。
remoteCandidates = RTCIceTransport.getRemoteCandidates();
参数:无。
返回值:包含RTCIceCandidate对象的数组。每个RTCIceCandidate对象代表一个从对等端收到的 ICE 候选项。
//getRemoteCandidates() 方法示例
const remoteCandidates = pc.getSenders()[0].transport.iceTransport.getRemoteCandidates();
remoteCandidates.forEach((candidate, index) => {
console.log("Candidate " + index + ":" + candidate.candidate);
});
3.getSelectedCandidatePair()方法
该方法返回ICE代理当前选择的候选对。
candidatePair = RTCIceTransport.getSelectedCandidatePair();
输入:无。
返回值:RTCIceCandidatePair 对象,描述了当前选择的 ICE 候选对。
//RTCIceCandidatePair的定义
dictionary RTCIceCandidatePair {
RTCIceCandidate local;
RTCIceCandidate remote;
};
其中,local 表示候选对中的本地候选项,remote 表示候选对中的对等端候选项。下面的代码清单 演示了获取并显示当前ICE候选对使用的网络协议。
//getSelectedCandidatePair()方法示例
const iceTransport = pc.getSenders()[0].transport.iceTransport;
const localProto = document.getElementById("local-protocol");
const remoteProto = document.getElementById("remote-protocol");
iceTransport.onselectedcandidatepairchange = (event) => {
const pair = iceTransport.getSelectedCandidatePair();
localProto.innerText = pair.local.protocol.toUpperCase();
remoteProto.innerText = pair.remote.protocol.toUpperCase();
}
4.getLocalParameters()方法
该方法返回本地ICE参数。
当调用方法 RTCPeerConnection.setLocalDescription() 时,相应地设置了本地 ICE 参数。
parameters = RTCIceTransport.getLocalParameters();
参数:无。
返回值:RTCIceParameters 对象,如果未被设置,则返回 nul1。
//RTClceParameters的定义
dictionary RTCIceParameters {
DOMString usernameFragment;
DOMString password;
};
其中,usernameFragment 和 password 分别表示用户名和密码。
5.getRemoteParameters()方法
该方法返回对等端ICE的参数,返回值类型为RTCIceParameters,其用法基本与getLocalParameters()方法一致,不再赘述。
RTCIceTransport 事件
1.statechange 事件
当 RTClceTransport 状态发生改变时触发该事件,通过属性 RTCIceTransport.state 获取当前状态值,对应事件句柄 onstatechange。
//statechange事件句柄示例
let iceTransport = pc.getSenders()[0].transport.iceTransport;
iceTransport.onstatechange = ev => {
if (iceTransport.state === "failed") {
handleFailure(pc);
}
}
也可以使用 addEventListener 监听 statechange 事件。
2.gatheringstatechange 事件
当ICE候选者的收集状态值发生改变时触发该事件,通过属性 gatheringState 获取当前状态值,对应事件句柄 ongatheringstatechange。
该事件与 icegatheringstatechange 相似,但 icegatheringstatechange 代表整个连接的候选收集状态,包括所有 RTCIceTransport,而 gatheringstatechange 只代表单个 RTCIceTranspor 的收集状态。
//gatheringstatechange事件句柄示例
pc.getSenders().forEach(sender => {
sender.transport.iceTransport.ongatheringstatechange = ev => {
let transport = ev.target;
if (transport.gatheringState === "complete") {
/* 这个传输通道已经完成了ICE候选者收集,但是其他通道可能仍在进行中 */
}
};
});
也可以使用 addEventListener 监听 gatheringstatechange 事件。
3.selectedcandidatepairchange 事件
当ICE代理选择了新的候选对时触发该事件,对应事件柄 onselectedcandidatepairchange。
在ICE协商过程中,从本地和对等端收集ICE候选者信息,当找到了一个有望成功建立网络连接的候选对,即触发事件selectedcandidatepairchange 时,使用 getSelectedCandidatePair() 方法可以获取此候选对。
ICE继续配对,如果找到了更优的候选对,则替换掉当前的,并再次触发 selectedcandidatepairchange 事件。
标签: Unity3d
日历
最新文章
随机文章
热门文章
分类
存档
- 2024年11月(3)
- 2024年10月(5)
- 2024年9月(3)
- 2024年8月(3)
- 2024年7月(11)
- 2024年6月(3)
- 2024年5月(9)
- 2024年4月(10)
- 2024年3月(11)
- 2024年2月(24)
- 2024年1月(12)
- 2023年12月(3)
- 2023年11月(9)
- 2023年10月(7)
- 2023年9月(2)
- 2023年8月(7)
- 2023年7月(9)
- 2023年6月(6)
- 2023年5月(7)
- 2023年4月(11)
- 2023年3月(6)
- 2023年2月(11)
- 2023年1月(8)
- 2022年12月(2)
- 2022年11月(4)
- 2022年10月(10)
- 2022年9月(2)
- 2022年8月(13)
- 2022年7月(7)
- 2022年6月(11)
- 2022年5月(18)
- 2022年4月(29)
- 2022年3月(5)
- 2022年2月(6)
- 2022年1月(8)
- 2021年12月(5)
- 2021年11月(3)
- 2021年10月(4)
- 2021年9月(9)
- 2021年8月(14)
- 2021年7月(8)
- 2021年6月(5)
- 2021年5月(2)
- 2021年4月(3)
- 2021年3月(7)
- 2021年2月(2)
- 2021年1月(8)
- 2020年12月(7)
- 2020年11月(2)
- 2020年10月(6)
- 2020年9月(9)
- 2020年8月(10)
- 2020年7月(9)
- 2020年6月(18)
- 2020年5月(4)
- 2020年4月(25)
- 2020年3月(38)
- 2020年1月(21)
- 2019年12月(13)
- 2019年11月(29)
- 2019年10月(44)
- 2019年9月(17)
- 2019年8月(18)
- 2019年7月(25)
- 2019年6月(25)
- 2019年5月(17)
- 2019年4月(10)
- 2019年3月(36)
- 2019年2月(35)
- 2019年1月(28)
- 2018年12月(30)
- 2018年11月(22)
- 2018年10月(4)
- 2018年9月(7)
- 2018年8月(13)
- 2018年7月(13)
- 2018年6月(6)
- 2018年5月(5)
- 2018年4月(13)
- 2018年3月(5)
- 2018年2月(3)
- 2018年1月(8)
- 2017年12月(35)
- 2017年11月(17)
- 2017年10月(16)
- 2017年9月(17)
- 2017年8月(20)
- 2017年7月(34)
- 2017年6月(17)
- 2017年5月(15)
- 2017年4月(32)
- 2017年3月(8)
- 2017年2月(2)
- 2017年1月(5)
- 2016年12月(14)
- 2016年11月(26)
- 2016年10月(12)
- 2016年9月(25)
- 2016年8月(32)
- 2016年7月(14)
- 2016年6月(21)
- 2016年5月(17)
- 2016年4月(13)
- 2016年3月(8)
- 2016年2月(8)
- 2016年1月(18)
- 2015年12月(13)
- 2015年11月(15)
- 2015年10月(12)
- 2015年9月(18)
- 2015年8月(21)
- 2015年7月(35)
- 2015年6月(13)
- 2015年5月(9)
- 2015年4月(4)
- 2015年3月(5)
- 2015年2月(4)
- 2015年1月(13)
- 2014年12月(7)
- 2014年11月(5)
- 2014年10月(4)
- 2014年9月(8)
- 2014年8月(16)
- 2014年7月(26)
- 2014年6月(22)
- 2014年5月(28)
- 2014年4月(15)
友情链接
- Unity官网
- Unity圣典
- Unity在线手册
- Unity中文手册(圣典)
- Unity官方中文论坛
- Unity游戏蛮牛用户文档
- Unity下载存档
- Unity引擎源码下载
- Unity服务
- Unity Ads
- wiki.unity3d
- Visual Studio Code官网
- SenseAR开发文档
- MSDN
- C# 参考
- C# 编程指南
- .NET Framework类库
- .NET 文档
- .NET 开发
- WPF官方文档
- uLua
- xLua
- SharpZipLib
- Protobuf-net
- Protobuf.js
- OpenSSL
- OPEN CASCADE
- JSON
- MessagePack
- C在线工具
- 游戏蛮牛
- GreenVPN
- 聚合数据
- 热云
- 融云
- 腾讯云
- 腾讯开放平台
- 腾讯游戏服务
- 腾讯游戏开发者平台
- 腾讯课堂
- 微信开放平台
- 腾讯实时音视频
- 腾讯即时通信IM
- 微信公众平台技术文档
- 白鹭引擎官网
- 白鹭引擎开放平台
- 白鹭引擎开发文档
- FairyGUI编辑器
- PureMVC-TypeScript
- 讯飞开放平台
- 亲加通讯云
- Cygwin
- Mono开发者联盟
- Scut游戏服务器引擎
- KBEngine游戏服务器引擎
- Photon游戏服务器引擎
- 码云
- SharpSvn
- 腾讯bugly
- 4399原创平台
- 开源中国
- Firebase
- Firebase-Admob-Unity
- google-services-unity
- Firebase SDK for Unity
- Google-Firebase-SDK
- AppsFlyer SDK
- android-repository
- CQASO
- Facebook开发者平台
- gradle下载
- GradleBuildTool下载
- Android Developers
- Google中国开发者
- AndroidDevTools
- Android社区
- Android开发工具
- Google Play Games Services
- Google商店
- Google APIs for Android
- 金钱豹VPN
- TouchSense SDK
- MakeHuman
- Online RSA Key Converter
- Windows UWP应用
- Visual Studio For Unity
- Open CASCADE Technology
- 慕课网
- 阿里云服务器ECS
- 在线免费文字转语音系统
- AI Studio
- 网云穿
- 百度网盘开放平台
- 迅捷画图
- 菜鸟工具
- [CSDN] 程序员研修院
- 华为人脸识别
- 百度AR导航导览SDK
- 海康威视官网
- 海康开放平台
- 海康SDK下载
- git download
交流QQ群
-
Flash游戏设计: 86184192
Unity游戏设计: 171855449
游戏设计订阅号