将TURN服务器添加到Android WebRTC本地应用程序

9

我正在开发WebRtc原生Android应用程序。我也在编译io.pristine库。只有当两个设备都连接到wifi时,我才能建立通话。如果其中一个设备连接到移动网络,则无法建立电话。我已经阅读了所有可能的论坛,看起来我需要TURN服务器。我已经运行了自己的TURN服务器,但我不知道如何强制应用程序使用此服务器。任何帮助都欢迎。谢谢!


你能指导我如何构建io.pristine库吗? - M.Hefny
严格来说,只有一个STUN服务器就足够了,但如果您的客户端无法建立点对点连接,TURN也会提供备用方案。有免费的公共STUN服务器可用,例如stun.l.google.com:19302。 - jamix
2个回答

18

WebRTC弃用旧API以创建ICE服务器。(使用旧API的答案

要创建ICE服务器,您需要使用IceServer构建器模式。

 PeerConnection.IceServer stun =  PeerConnection.IceServer.builder("stun:stun.l.google.com:19302").createIceServer();
 PeerConnection.IceServer turn =  PeerConnection.IceServer.builder("turn:numb.viagenie.ca").setUsername("webrtc@live.com").setPassword("muazkh").createIceServer();

10

创建PeerConnection时需要设置TURN服务器。

大致如下:

    // Set ICE servers
    List<PeerConnection.IceServer> iceServers = new ArrayList<>();
    iceServers.add(new org.webrtc.PeerConnection.IceServer("stun:xxx.xxx.xxx.xxx"));
    iceServers.add(new org.webrtc.PeerConnection.IceServer("turn:xxx.xxx.xxx.xxx:3478", "username", "credential"));

    // Create peer connection
    final PeerConnectionFactory.Options options = new PeerConnectionFactory.Options();
    PeerConnectionFactory factory = new PeerConnectionFactory(new PeerConnectionFactory.Options());
    MediaConstraints constraints = new MediaConstraints();
    PeerConnection peerConnection = factory.createPeerConnection(iceServers, constraints, new YourPeerConnectionObserver());

我没有运行过这段代码,但你应该能够理解它的含义。


1
在第二行和第三行末尾添加括号。 - Uriel Frankel
嘿 @Mikko,我的 ICE 服务器看起来像这样: "stun:URL", "turns:URL:433?transport=tcp", "turns:URL:5349?transport=tcp"但我在信令通道中只看到 typ hosttyp srflx 的 Ice 候选项。 当设备连接到同一热点时,我能够建立呼叫,但当它们中的一个使用蜂窝网络时,onIceConnectionChange: state= FAILED。 - Dmytro Batyuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接