我们正在尝试使用OpenTok将Voip(无视频)添加到我们的Android应用程序中。当第三个用户加入会话以及用户离开并重新加入会话时,我们会看到问题。
实施例: 会话已创建。 User1和User2加入..两者都可以听到对方说话。当User3加入时,我们会收到多个错误(如下所示)。结果,有时一个用户可以听到但不能说话,有时一个用户将无法听到或说话......或者两者的组合。谁得到错误似乎是随机的,但似乎是谁得到错误与谁可以说话/听到之间的相关性。
SubscriberListener onError()
消息:内部错误 - WebRTC发布者错误。
errorName:PublisherWebRTCError
errorCode:1610
SubscriberListener onError()
消息:内部错误 - WebRTC订户错误。
errorName:SubscriberWebRTCError
errorCode:1600
设备: 所有Nexus 7都运行4.4.2
OpenTok Android SDK版本: 2.2
答案 0 :(得分:0)
你的代码可能有些东西。由于您没有发布任何代码,我将尝试概括。
当第一个用户加入时,将使用流对象参数调用Session.SessionListener' s onStreamReceived
。要订阅该流,请致电
subscriber = session.subscribe(stream..)
要订阅多个用户,您可能希望每次调用session.subscribe方法时都保留一组订阅者对象。
如果这没有帮助,您可能处于网格p2p会话中。在某些网络条件下(防火墙或路由器配置),webRTC将对网格进行故障转移。最安全的路线是在创建会话时使用mediaRouted标志,或确保所有测试设备都在同一个wifi网络上:https://github.com/opentok/opentok-node#creating-sessions
答案 1 :(得分:0)
我在iOS上看到同样的问题。以下是我们订阅的方式
- (void)session:(OTSession *)session streamCreated:(OTStream *)stream
{
NSLog(@"%s", __PRETTY_FUNCTION__);
if (![self.streamID isEqualToString:stream.streamId])
{
self.tokBoxSubcriber = [[OTSubscriber alloc] initWithStream:stream delegate:self];
self.tokBoxSubcriber.subscribeToAudio = YES;
self.tokBoxSubcriber.subscribeToVideo = NO;
[self.tokBoxSession subscribe:self.tokBoxSubcriber error:nil];
}
}
以下是我们的发布方式
- (void)sessionDidConnect:(OTSession *)session
{
self.tokBoxPublisher = [[OTPublisher alloc] initWithDelegate:self name:@"publisher"];
self.tokBoxPublisher.publishAudio = YES;
self.tokBoxPublisher.publishVideo = NO;
OTError *error;
[self.tokBoxSession publish:self.tokBoxPublisher error:&error];
if (error)
{
NSLog(@"Error = %@", error);
}
[self.delegate connectedToVoIP:self];
}