我设法在A和B之间共享了视频和音频,我发现RTCDataChannelState已经变成了kRTCDataChannelStateOpen。
- (void)channelDidChangeState:(RTCDataChannel*)channelsendData也可以返回YES,但是我无法接收消息
- (void)peerConnection:(RTCPeerConnection*)peerConnection
didOpenDataChannel:(RTCDataChannel*)dataChannel永远不要打电话给我,我认为它应该在冰状态改变为RTCICEConnectionConnected之后调用,但是它没有!
创建数据通道:
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;我的提议和建议:
- (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;
}发布于 2017-05-04 14:26:59
如果您附加了SDP和WebRTC框架版本,这将更容易发现问题。
如果正确添加数据通道,则在设置RemoteDescription后,以下委托应在接收方调用
-(void)peerConnection:(RTCPeerConnection *)peerConnection
didOpenDataChannel:(RTCDataChannel *)dataChannel {
NSLog(@"Received remote data channel %ld ", (long)dataChannel.readyState);
dc = dataChannel;
dc.delegate = self;
}您应该在创建数据通道后创建该报价,以便该报价将包含数据通道的详细信息。 不需要在接收端创建数据信道,因为数据信道是全双工的。
https://stackoverflow.com/questions/43774529
复制相似问题