2017-05-04 6 views
0

Ich habe es geschafft, Video und Audio zwischen A und B zu teilen, und ich habe festgestellt, dass RTCDataChannelState in kRTCDataChannelStateOpen geändert wurde.Fehler beim Senden der Nachricht mit RTCDataChannel unter iOS

- (void)channelDidChangeState:(RTCDataChannel*)channel 

sendData auch JA zurückkehren kann, aber ich kann nicht die Nachricht empfangen und

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

nie denken called.I es nach Eis Zustand RTCICEConnectionConnected geändert aufgerufen werden soll aber es funktioniert nicht!
erstellen Datenkanal:

RTCDataChannelInit *DataChannelInit = [[RTCDataChannelInit alloc] init]; 
    DataChannelInit.maxRetransmits = 0; 
    DataChannelInit.isOrdered=false; 
    DataChannelInit.maxRetransmitTimeMs = -1; 
    DataChannelInit.isNegotiated = false; 
    DataChannelInit.streamId = 25; 
    RTCDataChannel *dataChannel =[_peerConnection createDataChannelWithLabel:@"commands" config:DataChannelInit]; 
    dataChannel.delegate=self; 
    self.datachannel = dataChannel; 

Mein Angebot und anwser:

- (RTCMediaConstraints *)defaultOfferConstraints { 
    NSArray *mandatoryConstraints = @[ 
     [[RTCPair alloc] initWithKey:@"OfferToReceiveAudio" value:@"true"], 
     [[RTCPair alloc] initWithKey:@"OfferToReceiveVideo" value:@"true"] 
    ]; 

    NSArray *optionalConstraints = @[ 
             [[RTCPair alloc] initWithKey:@"internalSctpDataChannels" value:@"true"], 
             [[RTCPair alloc] initWithKey:@"DtlsSrtpKeyAgreement" value:@"true"] 
             ]; 
    RTCMediaConstraints *constraints = 
     [[RTCMediaConstraints alloc] 
      initWithMandatoryConstraints:mandatoryConstraints 
        optionalConstraints:optionalConstraints]; 
    return constraints; 
} 

Antwort

0

Wenn Sie Angebot/Antwort SDP und WebRTC Framework-Version anhängen, die leichter das Problem identifizieren sein wird.

Der folgende Delegierte auf der Empfängerseite anrufen sollte, nachdem Sie die RemoteDescription gesetzt, wenn Sie den Datenkanal hinzufügen richtig

-(void)peerConnection:(RTCPeerConnection *)peerConnection 
    didOpenDataChannel:(RTCDataChannel *)dataChannel { 
    NSLog(@"Received remote data channel %ld ", (long)dataChannel.readyState); 
    dc = dataChannel; 
    dc.delegate = self; 
} 

Sie das Angebot nach dem Erstellen Datenkanal schaffen sollte, so dass Angebot wird die tragen Datenkanaldetails

Keine Notwendigkeit, einen Datenkanal auf der Empfängerseite zu erstellen, da der Datenkanal vollduplex ist.

+0

Ich erstelle das Angebot nach dem Erstellen von Datenkanal, aber 'didOpenDataChannel' wurde nicht aufgerufen, nachdem ich die RemoteDescription eingestellt habe. – potato

+0

Können Sie das Angebot sdp mit Pastebin bieten? – Ajay

+0

Vielen Dank für Ihre Hilfe und hier ist mein [Angebot sdp] (https://pastebin.com/embed_js/iY9h0SVS) – potato

Verwandte Themen