Получить поток OpenTok по ID

Я создаю приложение, в котором я хочу, чтобы определенный поток отображался большим на другой странице. Будет одна страница со всеми потоками (подписками) и одна страница, которая будет показывать КОНКРЕТНЫЙ поток на весь экран.

  1. Отправить streamID выбранного потока в базу данных.
  2. На другой странице извлеките последний добавленный идентификатор потока в базе данных.
  3. Получить поток по ID и показать его на странице

У меня первые два шага работают, последний шаг - проблема. Мне как-то нужно получить объект потока по заданному streamId. Это возможно? ИЛИ есть ли другой способ добиться этого?


person Ruud Schroën    schedule 17.06.2014    source источник


Ответы (2)


Я не знаю, правильно ли это сделать, но вы можете добавить все объекты потока в массив:

var streamContainer = [];
session.on("streamCreated", streamCreatedHandler);

streamCreatedHandler = function(e) {
    streamContainer.push(e.stream)
}

и когда ваш идентификатор будет получен, отпишитесь от текущего, переберите массив и подпишитесь на новый поток:

for(var i = 0; i < streamContainer.length; i++) {
    if(streamContainer[i].id == dbStreamId) {
        session.subscribe(streamContainer[i], 'DOMELEMENT', {options});
    }
}
person JaySH    schedule 26.06.2014
comment
Спасибо за Ваш ответ! Несколько советов для вас: 1. streamContainer = {} поможет вам сократить код. Вы можете установить streamId в качестве ключа и объект потока в качестве значения. Таким образом, когда вы просматриваете поток, вы можете просто выполнить команду streamContainer[streamId]. 2. OP нужна база данных для хранения потока, поэтому ваше предложение не сработает для его варианта использования. - person songz; 30.06.2014
comment
Это (почти) тот же подход, который я использовал. Я использую session.on(streamCreated) и проверяю, соответствует ли данный идентификатор идентификатору потока. Если это так, подпишитесь на него. Но где в вашем коде вы отписываетесь от текущего потока? - person Ruud Schroën; 01.07.2014
comment
Когда поток отключается, он автоматически отписывается от сеанса. Вы также можете прослушать событие streamDestroyed. Или вручную вызовите session.unsubscribe(stream), если вы хотите прекратить просмотр пользователя. - person songz; 01.07.2014

Вам может даже не понадобиться база данных для того, что вы пытаетесь сделать. Просто подключите обе страницы (конкретный поток и все потоки) к одному и тому же идентификатору сеанса. Вы можете указать streamId в своем URL-адресе в качестве параметра, например: ?streamId=1343-thneue...

В вашем событии streamCreated просто проверьте stream.streamId в вашей функции обратного вызова с помощью вашего URL-адреса streamId. Если они совпадают, вызовите session.subscribe для этого объекта потока.

person songz    schedule 30.06.2014
comment
Причина, по которой мне нужна база данных, заключается в том, что большой экран проверяет каждые 5 секунд, соответствует ли последняя добавленная запись текущему идентификатору потока. Если нет, он обновляет страницу и показывает новый поток. - person Ruud Schroën; 01.07.2014
comment
IC. Ваш код может выглядеть примерно так (синтаксис может быть неверным): $.get(/getLastStream.json, function(res){ if(res.streamId != currentStreamId){session.unsubscribe(allStreams[currentStreamId]); session .subscribe(allStreams[res.streamId]);}}); - person songz; 01.07.2014