OpenTok iOS API:在iPad上流式传输两个以上

时间:2013-05-27 08:51:13

标签: ios stream opentok

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

有了这个,我正在测试三台iPad,屏幕上只有两台

所以如何在三台iPad中一次制作两个以上的流

2 个答案:

答案 0 :(得分:1)

您链接的项目(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:中创建的OTSubscribers存储在NSArray等集合中,处理删除正确的订阅者并递减_numSubscribers中的session:didDropStream:,并进行思考关于你希望updateSubscriber方法如何工作。

答案 1 :(得分:0)

如果您在viewcontroller file line 93中查看hello world的源代码,您将看到它只创建一个订阅者。要让多个订阅者简单,请创建一个数组或哈希对象来存储多个订阅者。