OpenTok iOS API: iPad中的流不止两个



我想在不同的设备上为两个以上的用户进行直播,并从opentok获得api,我从(https://github.com/opentok/OpenTok-iOS-Hello-World)下载了演示应用程序,这不是webrtc,我已经使用密钥,会话和令牌运行应用程序,禁用梨到梨,它在两个直播中工作得很好,但是当我试图连接第三个直播时,我无法得到它。我在演示应用中发现(在iPad 2/3/4上,限制是4个流。一个应用程序可以同时拥有最多四个订阅者,或者一个发布者和最多三个订阅者。

我用三台ipad进行测试,屏幕上只有两台。

那么如何在三台ipad上同时播放两个以上的流呢

您链接的项目(OpenTok-iOS-Hello-World)仅构建为订阅一个流。作为概念证明,只需修改几个方法并在ViewController.m

中添加一个实例变量,就可以在屏幕上获得两个订阅者

创建一个跟踪订阅者数量的变量:

@implementation ViewController {
    OTSession* _session;
    OTPublisher* _publisher;
    OTSubscriber* _subscriber;
    int _numSubscribers;  // **NEW**
}

初始化方法中的变量:

- (void)viewDidLoad
{
    [super viewDidLoad];
    _session = [[OTSession alloc] initWithSessionId:kSessionId
                                           delegate:self];
    _numSubscribers = 0;  // **NEW**
    [self doConnect];
}

确保我们没有订阅自己的流:

static bool subscribeToSelf = NO;

修改不再关心此会话委托方法中是否已存在订阅者:

- (void)session:(OTSession*)mySession didReceiveStream:(OTStream*)stream
{
    NSLog(@"session didReceiveStream (%@)", stream.streamId);
    // See the declaration of subscribeToSelf above.
    if ( (subscribeToSelf && [stream.connection.connectionId isEqualToString: _session.connection.connectionId])
           ||
         (!subscribeToSelf && ![stream.connection.connectionId isEqualToString: _session.connection.connectionId])
       ) {
        // ** Changing if statement **
        if (_numSubscribers < 2) {
            _subscriber = [[OTSubscriber alloc] initWithStream:stream delegate:self];
            _numSubscribers++;
        }
    }
}

将订阅者并排放置,占用较少的宽度:

- (void)subscriberDidConnectToStream:(OTSubscriber*)subscriber
{
    NSLog(@"subscriberDidConnectToStream (%@)", subscriber.stream.connection.connectionId);
    // ** Calculate the frame **
    CGRect subFrame = CGRectMake(0, widgetHeight, widgetWidth / 2, widgetHeight)
    if (_numSubscribers == 2) subFrame = CGRectOffset(subFrame, widgetWidth / 2, 0);
    [subscriber.view setFrame:subFrame];
    [self.view addSubview:subscriber.view];
}

注意:这个解决方案不会产生一个稳定的应用程序。它应该可以让你看到两个订阅者,只要你不断开其中任何一个ipad。要完成此操作,您需要将在session:didRecieveStream:中创建的otsubscriber存储在一个集合中,如NSArray,处理删除正确的订阅者并减少session:didDropStream:中的_numSubscribers,并考虑如何使用updateSubscriber方法。

如果查看视图控制器文件第93行中hello world的源代码,您将看到它只创建了一个订阅者。要拥有多个订阅者,只需创建一个数组或哈希对象来存储多个订阅者。

最新更新