ios - WebRTC的RTCDataChannel在iOS中的实现

标签 ios objective-c swift webrtc

我正在使用 ISBX/apprtc-ios视频聊天实现代码。这在 iPhone 和模拟器中完美运行。我想在两个对等点之间发送文本/字符串数据,我正在使用 RTCDataChannel 类。

以下是我的实现,但我无法建立连接。它总是给出状态 kRTCDataChannelStateConnecting 我怎样才能连接 RTCDataChannel?是否有适用于 iOS 的 WebRTC RTCDataChannel 的可用实现?

- (void)createNewDataChannel {
    if (self.clientDataChannel) {
        switch(self.clientDataChannel.state) {
            case kRTCDataChannelStateConnecting:
                NSLog(@"kRTCDataChannelStateConnecting");
                break;
            case kRTCDataChannelStateOpen:
                NSLog(@"kRTCDataChannelStateOpen");
                break;
            case kRTCDataChannelStateClosing:
                NSLog(@"kRTCDataChannelStateClosing");
                break;
            case kRTCDataChannelStateClosed:
                NSLog(@"kRTCDataChannelStateClosed");
                break;
            default:
                NSLog(@"Unknown");
        }
        return;
    }
    if (self.peerConnection == nil) {
        NSLog(@"Peerconnection is nil");
    }

    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.clientDataChannel = dataChannel;

    if (self.clientDataChannel == nil) {
        NSLog(@"Datachannel is nil");
    }
    else {
        NSLog(@"Datachannel is working");
    }
}

最佳答案

我能够通过 RTCDataChannel 发送数据。我所做的是在发送报价之前。我使用以下配置创建了 RTCDataChannelInit。

RTCDataChannelInit *datainit = [[RTCDataChannelInit alloc] init];

datainit.isNegotiated = YES;

datainit.isOrdered = YES;

datainit.maxRetransmits = 30;

datainit.maxRetransmitTimeMs = 30000;

datainit.streamId = 1;
self.dataChannel = [_peerConnection createDataChannelWithLabel:@"commands" config:datainit];
self.dataChannel.delegate=self;

两个设备都连接后,我检查了委托(delegate)函数中的状态。 channel 的状态是打开的。

- (void)channelDidChangeState:(RTCDataChannel*)channel
{
    NSLog(@"channel.state %u",channel.state);
}

然后我按照下面的代码发送数据:

RTCDataBuffer *buffer = [[RTCDataBuffer alloc] initWithData:[str dataUsingEncoding:NSUTF8StringEncoding] isBinary:NO];
BOOL x = [self.dataChannel sendData:buffer];

这里给出了我使用的配置: https://groups.google.com/forum/#!searchin/discuss-webrtc/RTCDataChannel/discuss-webrtc/9NObqxnItCg/mRvXBIwkA7wJ

关于ios - WebRTC的RTCDataChannel在iOS中的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37850376/

相关文章:

objective-c - 在 heightForRowAtIndexPath 委托(delegate)方法中访问 TableViewCell 时应用程序崩溃

swift - 当滚动单元格时更改焦点和颜色

ios - Objective-C中的“发现扩展时遇到的错误”

ios - 容器 View 在 View 上不可见,但在 TableView 内

objective-c - 带有 Storyboard的 IBAction subview

iphone - UITabBarController 选中的项目

ios - Swift 3 - 将 bool 值发送到不同的类

ios - 导航 Controller 如何弹出整个堆栈,包括根

ios - CoreLocations reverseGeocodeLocation 让它每分钟运行/循环一次

ios - 日期选择器文本字段中的核心数据日期比较