2017-03-14 6 views
0

데이터 채널을 만들고 싶습니다. 그러나 이것을 구현하는 데 어려움을 겪고 있습니다. "발신자 측"에서 실행되는 코드를 추가했습니다.데이터 채널 Webrtc 스위프트

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 
didChangeIceConnectionState:(RTCIceConnectionState)newState 

그래서, newState == RTCIceConnectionStateConnected 경우, 그 의미와 :

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

당신의 PeerConnection 위임 아래 사용하여 ICE 연결 상태를 확인할 수의 PeerConnection 성공적 여부를 설립 위치를 확인하려면 didOpenDataChannel 호출을 받아야합니다.

+0

안녕하세요 당신은 rtcdatachannel의 작동 샘플을 가지고 있습니다. 데이터를받을 수는 있지만 클라이언트와 서버를 모두 원한다면 데이터를 보낼 수는 없습니다. –