2017-05-04 8 views
0

私はAとBの間でビデオとオーディオを共有することができ、RTCDataChannelStateがkRTCDataChannelStateOpenに変更されています。iOSでRTCDataChannelを使用してメッセージを送信できません

- (void)channelDidChangeState:(RTCDataChannel*)channel 

sendDataもしかし、私がメッセージを受信できないと

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

はそれがないしかし、氷の状態がRTCICEConnectionConnectedに変更した後、それが呼ばれるべきだと思うんcalled.I決して、YESを返すことができます!
作成データチャネル:

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; 

私の申し出とanwser:

あなたが問題を特定し、より簡単になりますオファー/アンサーSDPとのWebRTCのフレームワークのバージョンを添付する場合は
- (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; 
} 

答えて

0

あなたがRemoteDescriptionを設定した後、データ・チャネルを追加した場合、次のデリゲートは、そのオファーが運びますので、適切に

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

あなたは、データチャネルを作成した後にオファーを作成する必要があり、受信機側で呼び出す必要がありますデータチャネルの詳細

データチャネルが全二重であるため、受信側でデータチャネルを作成する必要はありません。

+0

私はデータチャンネルを作成した後にOfferを作成しますが、RemoteDescriptionを設定すると 'didOpenDataChannel'は呼び出されませんでした。 – potato

+0

オファーsdpにペーストビンを提供できますか? – Ajay

+0

ご協力いただきありがとうございます。私の[offer sdp](https://pastebin.com/embed_js/iY9h0SVS) – potato

関連する問題