首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RTCDataChannel在iOS上发送消息失败

使用RTCDataChannel在iOS上发送消息失败
EN

Stack Overflow用户
提问于 2017-05-04 05:28:35
回答 1查看 539关注 0票数 0

我设法在A和B之间共享了视频和音频,我发现RTCDataChannelState已经变成了kRTCDataChannelStateOpen。

代码语言:javascript
复制
- (void)channelDidChangeState:(RTCDataChannel*)channel

sendData也可以返回YES,但是我无法接收消息

代码语言:javascript
复制
- (void)peerConnection:(RTCPeerConnection*)peerConnection
    didOpenDataChannel:(RTCDataChannel*)dataChannel

永远不要打电话给我,我认为它应该在冰状态改变为RTCICEConnectionConnected之后调用,但是它没有!

创建数据通道:

代码语言:javascript
复制
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;

我的提议和建议:

代码语言:javascript
复制
- (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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-04 14:26:59

如果您附加了SDP和WebRTC框架版本,这将更容易发现问题。

如果正确添加数据通道,则在设置RemoteDescription后,以下委托应在接收方调用

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

您应该在创建数据通道后创建该报价,以便该报价将包含数据通道的详细信息。 不需要在接收端创建数据信道,因为数据信道是全双工的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43774529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档