WebRTC的问题以及如何debug-3

作者:Lee Sylvester(原文链接

翻译:刘通

原标题:WebRTC Issues and How to Debug Them

前文链接:WebRTC的问题以及如何debug-1WebRTC的问题以及如何debug-2

issue31

Debug

你已经阅读到这里了。这篇文章本应是只关于调试WebRTC连接性的,但你可能已经意识到了,也会涉及很多可能导致问题的地方。除非你非常的幸运,否则是绝对会出错的。

进行WebRTC连接相关的工作时会有许多潜在问题。第一个就是根本无法进行连接。在这种情况下,只要在本地按照连接过程工作就是一个良好的开端。

调试你本地会话设置

正如我前面提到的,WebRTC是一个客户端巨兽。建立ICE连接的过程基本上全都是在浏览器中完成的。STUN和TURN服务器相对而言就非常简单了,因此大多数的问题都是你自己导致的。

但是不要灰心,这会刺激你尽最大努力来解决这些烦人的错误。

在寻找连接失败的根本原因时,首先应该检查通过信令服务器的数据。需要记住的是,媒体和网络会话描述数据包都是通过这里发送的,所以你手头上有许多数据来测试问题出在哪里。

最明显的着手点是确定哪些数据包已被发送和接收。注意,提议和应答需要从一个机器发送给另一个才能进行连接。

# 对等端收到提议了吗?客户端收到应答了吗?如果二者有一个没有时候到的话,那么连接就无法成功建立。

# 同样的,ICE候选数据包是否生成了?它们被分享了吗?各方是否在addIceCandidate中添加了另一方的数据包?

# 如果所有数据包都已被发送和接收了,那么检查远程流是否通过RTCPeerConnection中的onaddstream处理程序添加到HTML视频元素中?之前我确实没有提到过,但我确信在构建应用程序的时候一定要查看它。

如果以上几条检查过了都没有问题,那么就需要对会话数据进行深入排查了。

会话描述协议

所有用于建立连接的数据都是SDP格式的。当你第一次看到它的时候可能会有些困惑,但只要给你一点帮助,它就可以成为一个非常有启发性的资源。

ICE候选SDP数据包更重要的一个方面是typ参数。对于WebRTC,这可以是以下三种选择之一:

# typ host

# typ srflx

# typ relay

typ host

host类型表示与本地网络上设备的连接。通常情况下,所有host连接都不会使用STUN或TURN。原因在于,由于连接设备都在同一网络上,所以根本不需要本地到公共IP地址的转换,因此可以直接进行连接。

如果你希望连接到同一网络上的机器,则两台机器会共享host SDP数据包。如果连接仍然没能建立,那么你可以就认为你的代码在某个地方出现了大量的错误。

需要注意的是,仅仅是因为两台机器位于同一个网络中,它不会假设可以建立直接连接。host SDP ICE候选必须由双方提供。我见到过许多机器必须需要TURN连接才能与它自己相连。

typ srflx

srflx是服务器反身性(Server Reflexive)的缩写,用于表示获取公共IP地址的术语。因此,srflx代表只需要STUN的对等连接。当双方都提供了srflx数据包的时候,这意味着双方都应该通过STUN-only设置变成可连接的,但并不意味着双方可以通过这种方式实现相互连接。

但是,他们很有可能可以连接。

typ relay

relay用于描述TURN的连接性。当双方都提供这样的数据包时,那么连接是绝对可能进行的。

上面列出的数据包类型不是连续的,也就是说,设备可以提供srflx数据包,但不提供relay数据包,反之亦然。当双方都不能提供匹配的数据包类型时,连接根本就不可能建立。

填写常用邮箱,接收社区更新

WebRTC 中文社区由

运营