嗨,我正在使用 AppRTCDemo 及其在他们的服务器上工作。当前的机制是如何交换聊天室名称并进入同一个房间连接对等点。
但是我想从一台设备拨打电话以接听另一台设备的电话,然后同行应该进入一个房间进行视频会话,
我搜索了很多,我想出了我需要的信令服务器,我没有也不想动手,
现在在这种情况下,另一台设备如何知道设备一个正在拨号并共享特定的房间名称,以便在 Android 客户端接受并进入同一个房间进行视频通话。
嗨,我正在使用 AppRTCDemo 及其在他们的服务器上工作。当前的机制是如何交换聊天室名称并进入同一个房间连接对等点。
但是我想从一台设备拨打电话以接听另一台设备的电话,然后同行应该进入一个房间进行视频会话,
我搜索了很多,我想出了我需要的信令服务器,我没有也不想动手,
现在在这种情况下,另一台设备如何知道设备一个正在拨号并共享特定的房间名称,以便在 Android 客户端接受并进入同一个房间进行视频通话。
有两个可用于WebRTC的android apkappRtcDemo
和webRtcDemo
. appRtcDemo
apk 可用于 android 设备与浏览器的连接。您需要提供房间 ID 才能连接到一个房间。如果您是房间发起人,那么您必须输入 -1。如果你想连接两个安卓设备,那么你必须编译和安装webRtcDemo
apk。这个apk接口提供了输入另一个设备的IP地址的地方,反之亦然,然后两个设备都将被连接。
请通过-> http://www.webrtc.org/reference/getting-started
了解更多信息。我编译和安装的两个 apk 并检查了它是如何工作的。
我能够使用 webrtcdemo 在两个 android 设备之间成功拨打电话。但我使用办公网络的 WLAN 进行了测试。我没有进一步使用它,因为我使用 apprtcdemo 作为应用参考。我的建议是当您在 webrtcdemo 中输入远程 ip 时,只需检查是否未选中环回。我猜你的环回是启用的,所以你收到了你自己的视频数据包,虽然你已经输入了远程 ip。确保在拨打电话时禁用环回。
在本书http://chimera.labs.oreilly.com/books/1230000000545/ch03.html#STUN_TURN_ICE中可以找到一个很好的解释 ,它提供了 WebRTC 如何使用 ICE 技术的基础知识。
特别是假设 STUN 服务器的 IP 地址已知,WebRTC 应用程序首先向 STUN 服务器发送绑定请求。STUN 服务器回复一个响应,其中包含从公共网络看到的客户端的公共 IP 地址和端口。
现在应用程序发现了它的公共 IP 和端口元组,这些元组可以通过 SDP 发送给其他对等方。(请注意,SDP 是通过外部信号通道发送的,通过网络服务建立的网络套接字)
有了这个机制,每当两个对等方想要通过 UDP 相互通信时,他们就可以使用已建立的公共 IP 和端口元组来交换数据。
不幸的是,在某些情况下,UDP 可能会被防火墙阻止。为了解决这个问题,每当 STUN 失败时,我们可以使用 Traversal Using Relays around NAT (TURN) 协议作为备用协议,该协议可以在 UDP 上运行并在其他所有方法都失败时切换到 TCP。
WebRTC 将 SDP Offer 提供给客户端 JS 应用程序以发送(无论 JS 应用程序想要)到其他设备,后者使用它来生成 SDP Answer。
诀窍在于 SDP 包括 ICE 候选者(实际上是“尝试通过此 IP 地址和此端口与我交谈”)。ICE 可以在防火墙中打开端口;虽然如果双方都是对称 NAT,一般情况下是不可能的,并且可以使用替代候选者(在 TURN 服务器上)。
一旦他们直接交谈(或通过 TURN,这实际上是一个数据包镜像),他们就可以打开一个 DTLS 连接并使用它来加密 SRTP-DTLS 媒体流,并通过 DTLS 发送 DataChannel。
编辑:这里的首字母缩略词:http ://blog.1click.io/10-jargons-abbreviations-for-webrtc-fans/其余的是谷歌。其中大部分是由 IETF ( http://ietf.org/ )定义的
编辑 2:Firefox 和 Chrome(以及规范)已经开始对 ICE 候选者使用“涓流”,因此 ICE 候选者通常在面后添加到 PeerConnection 并独立于初始 SDP 进行交换(尽管您可以等到最初的候选人在发送报价之前已经准备好,并将它们捆绑在一起)。见https://webrtcglossary.com/trickle-ice/和https://datatracker.ietf.org/doc/draft-ietf-ice-trickle/