问题描述: 在Android中使用WebRTC时,发现onIceCandidate方法从未被调用。
解决方法:
确保正确设置PeerConnection的监听器。
peerConnection = factory.createPeerConnection(configuration, new PeerConnection.Observer() {
// 省略其他方法
@Override
public void onIceCandidate(IceCandidate candidate) {
// 处理IceCandidate
}
// 省略其他方法
});
确保在创建PeerConnection之后,添加本地媒体流并创建offer。
// 添加本地媒体流
peerConnection.addStream(localMediaStream);
// 创建offer
peerConnection.createOffer(new SdpObserver() {
// 省略其他方法
@Override
public void onCreateSuccess(SessionDescription sdp) {
peerConnection.setLocalDescription(sdp, new SdpObserver() {
// 省略其他方法
@Override
public void onSetSuccess() {
// 发送sdp给对方
}
// 省略其他方法
});
}
// 省略其他方法
}, new MediaConstraints());
确保正确处理收到的远程媒体流。
// 监听远程媒体流
peerConnection.setRemoteStreamObserver(new MediaStream.Observer() {
// 处理远程媒体流
});
确保在收到对方的offer后,正确设置远程描述信息,并创建answer。
// 设置远程描述信息
peerConnection.setRemoteDescription(new SdpObserver() {
// 省略其他方法
@Override
public void onSetSuccess() {
// 创建answer
peerConnection.createAnswer(new SdpObserver() {
// 省略其他方法
@Override
public void onCreateSuccess(SessionDescription sdp) {
peerConnection.setLocalDescription(sdp, new SdpObserver() {
// 省略其他方法
@Override
public void onSetSuccess() {
// 发送sdp给对方
}
// 省略其他方法
});
}
// 省略其他方法
}, new MediaConstraints());
}
// 省略其他方法
}, sdp);
确保在收到对方的IceCandidate时,正确添加到PeerConnection中。
// 收到对方的IceCandidate时调用
public void onReceiveRemoteIceCandidate(IceCandidate candidate) {
peerConnection.addIceCandidate(candidate);
}
请根据自己的具体情况,逐步检查和调试代码,确保以上步骤都正确执行,并处理了相关的回调方法。