You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android WebRTC设置后ICE Candidate未生成及相关问题咨询

WebRTC Android 常见疑问解答(基于org.webrtc:google-webrtc:1.0.32006)

针对你遇到的三个问题,直接给出明确解答:

1. 收到含ICE信息的SDP如何处理?

直接将完整的SDP作为参数调用peerConnection.setRemoteDescription()即可。WebRTC的PeerConnection内部会自动解析SDP中的a=candidate行(ICE候选信息),无需手动提取这些信息再调用addIceCandidate()。只有当后续通过WebSocket单独收到ICE候选消息时,才需要调用addIceCandidate()来添加。

2. onIceCandidate多次触发的ICE信息是否需要全部发送?

是的,每次触发生成的ICE候选都需要发送给对端。ICE协议会收集多个网络候选(比如本地IP、STUN分配的公网IP等),对端需要这些候选来尝试建立最佳的网络连接。注意:当onIceCandidate回调传入的IceCandidate为null时,代表ICE候选收集完成,建议给对端发送一个结束标识,告知对方无需再等待新的ICE候选。

3. SDP与ICE交换完成后需要调用什么方法发起通话?

不需要额外调用“发起通话”的方法。WebRTC的PeerConnection会在SDP交换完成、ICE候选互相交换后,自动尝试建立P2P连接。当连接成功建立后,会触发onTrack回调(对应你使用的1.0.32006版本),此时你可以从回调中获取远端音视频轨道,渲染到对应的SurfaceViewRenderer上即可。

额外排查建议(针对你提到的ICE Candidate未生成问题)

检查是否正确配置了ICE服务器(STUN/TURN),示例配置代码如下:

List<PeerConnection.IceServer> iceServers = new ArrayList<>();
// 添加STUN服务器
iceServers.add(PeerConnection.IceServer.builder("stun:stun.l.google.com:19302").createIceServer());
// 如果需要穿透NAT,添加TURN服务器
// iceServers.add(PeerConnection.IceServer.builder("turn:your-turn-server.com:3478")
//         .setUsername("turn-user")
//         .setPassword("turn-pass")
//         .createIceServer());

PeerConnection.RTCConfiguration rtcConfig = new PeerConnection.RTCConfiguration(iceServers);
PeerConnection peerConnection = peerConnectionFactory.createPeerConnection(rtcConfig, observer);

如果没有配置ICE服务器,PeerConnection可能无法生成有效的ICE候选,导致连接失败。

内容的提问来源于stack exchange,提问作者Ritu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:22:12