2017-03-14 40 views
0

データチャンネルを作成します。しかし、私はこれを実装するいくつかの困難を抱えています。私は、「発信者側」上で動作するコードを追加しました:DataChannel Webrtc Swift

func initWebRTC() { 
     RTCInitializeSSL() 
     peerConnectionFactory = RTCPeerConnectionFactory() 

     let mandatoryConstraints = ["OfferToReceiveAudio": "true", "OfferToReceiveVideo": "false"] 
     let optionalConstraints = [ "DtlsSrtpKeyAgreement": "true", "RtpDataChannels" : "true"] 


     mediaConstraints = RTCMediaConstraints.init(mandatoryConstraints: mandatoryConstraints, optionalConstraints: optionalConstraints) 
    } 

func prepareNewConnection() -> RTCPeerConnection { 
     var icsServers: [RTCIceServer] = [] 

     icsServers.append(RTCIceServer(urlStrings: ["stun:stun.l.google.com:19302"], username:"",credential: "")) 

     let rtcConfig: RTCConfiguration = RTCConfiguration() 
     rtcConfig.tcpCandidatePolicy = RTCTcpCandidatePolicy.disabled 
     rtcConfig.bundlePolicy = RTCBundlePolicy.maxBundle 
     rtcConfig.rtcpMuxPolicy = RTCRtcpMuxPolicy.require 
     rtcConfig.iceServers = icsServers; 

     peerConnection = peerConnectionFactory.peerConnection(with: rtcConfig, constraints: mediaConstraints, delegate: self) 
     peerConnection.add(mediaStream); 

     let tt = RTCDataChannelConfiguration(); 
     tt.isOrdered = false; 

     tt.isNegotiated = false 

     self.dataChannel = peerConnection.dataChannel(forLabel: "datachannel", configuration: tt) 

     self.dataChannel.delegate = self 
     print("create datachannel") 

     return peerConnection; 
    } 

多くの人で言ったように私が提供する前に、データチャネルを作成します。 このメソッド(次のコードを参照)は何回か呼び出されます。チャネル状態は、2〜3

public func dataChannelDidChangeState(_ dataChannel: RTCDataChannel){ 
     print("channel.state \(dataChannel.readyState.rawValue)"); 
    } 

に起こっているしかし、私は、受信側で何をすべきかが必要ですか?そこに何も起こらないから?データチャネルを受信機にバインドする必要がありますか?もしそうなら、どうしたらいいですか?

答えて

0

データチャネルフォームの発信側を作成し、オファーを送信したら、着信側から応答を送信してピア接続を確立する必要があります。ピア接続が確立されると、データチャネルがデータ転送の準備が整ったら、ピア接続代理の下で、被呼側で呼び出されます。

- (void)peerConnection:(RTCPeerConnection*)peerConnection 
didOpenDataChannel:(RTCDataChannel*)dataChannel 

peerconnectionが正常かどうかを確立ところ、あなたはpeerconnectionデリゲートの下に使用してICEの接続状態を確認することができます確認するには:

- (void)peerConnection:(RTCPeerConnection *)peerConnection 
didChangeIceConnectionState:(RTCIceConnectionState)newState 

ので、NewStateに== RTCIceConnectionStateConnected場合、それはピア接続が行わ意味しますdidOpenDataChannel呼び出しを取得する必要があります。

+0

あなたはrtcdatachannelの作業サンプルを持っていますが、データを受信することはできますが、データを送信することはできません。クライアントとサーバーの両方が好きなら、コードを与えることができます。 –

関連する問題