Я работаю над приложением Android WebRTC, где мне нужен канал данных для отправки дополнительной информации, когда соединение установлено. Я создаю канал данных следующим образом:
DataChannel.Init init = new DataChannel.Init();
dataChannel = peerConnection.createDataChannel("knock_data_chanel", init);
Но это не создает никаких DataChannel
в моем приложении, и когда я проверяю сразу после кода выше, dataChannel
всегда нулевой.
Кто-нибудь знает, как это решить? Это может быть мой PeerConnection
? Или это что-то вроде MediaConstraints?
Мой PeerConnection
процесс создания:
PeerConnection.RTCConfiguration rtcConfig =
new PeerConnection.RTCConfiguration(signalingParameters.iceServers);
// TCP candidates are only useful when connecting to a server that supports
// ICE-TCP.
rtcConfig.tcpCandidatePolicy = PeerConnection.TcpCandidatePolicy.DISABLED;
rtcConfig.bundlePolicy = PeerConnection.BundlePolicy.MAXBUNDLE;
rtcConfig.rtcpMuxPolicy = PeerConnection.RtcpMuxPolicy.REQUIRE;
rtcConfig.continualGatheringPolicy = PeerConnection.ContinualGatheringPolicy.GATHER_CONTINUALLY;//todo change to GATHER_CONTINUALLY later if that's possible on server end.
// Use ECDSA encryption.
rtcConfig.keyType = PeerConnection.KeyType.ECDSA;
// Enable DTLS for normal calls and disable for loopback calls.
rtcConfig.enableDtlsSrtp = !peerConnectionParameters.loopback;
rtcConfig.sdpSemantics = PeerConnection.SdpSemantics.UNIFIED_PLAN;
peerConnection = peerConnectionFactory.createPeerConnection(rtcConfig, pcObserver);
Мой SDP MediaConstraint
sdpMediaConstraints = new MediaConstraints();
sdpMediaConstraints.mandatory.add(
new MediaConstraints.KeyValuePair("OfferToReceiveAudio", "true"));
sdpMediaConstraints.mandatory.add(new MediaConstraints.KeyValuePair(
"OfferToReceiveVideo", "true"));
sdpMediaConstraints.optional.add(new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true"));
Тогда я создаю предложение с этим:
peerConnection.createOffer(sdpObserver, sdpMediaConstraints);
Любая помощь будет оценена, спасибо!