Я подписываюсь на поток обмена экранами следующим образом:
this.openTokSession.on('streamCreated', (event: any) => {
if(event.stream.videoType === 'screen') {
//it's screen sharing
var screenSubscriber = this.openTokSession.subscribe(event.stream,
'screenshareDisplay', {
appendMode: 'append',
width: '100%',
height: '100%'
},
(error: any) => {
if (error) {
console.log(error);
} else {
screenSubscriber.on("videoDisabled", (event: any) => {
console.log('videoDisabled1')
});
}
}
);
} else {
//it's normal video
}
});
Вы увидите, что я пытаюсь прослушать videoDisabled
на подписчике выше, но также попробовал егосеанс здесь:
this.openTokSession.on("videoDisabled", (event: any) => {
console.log('videoDisabled1')
if(typeof(event.stream) !== 'undefined') {
if(event.stream.videoType === 'screen') {
console.log('videoDisabled2');
}
}
});
... но ни одно из событий не запускается, несмотря на то, что я могу увидеть остановку общего экрана, когда издатель вызывает publishVideo(false)
.
Может кто-нибудь дать мнекакие-либо указатели на то, какое событие я должен слушать, и находится ли оно в потоке или в сеансе?
РЕДАКТИРОВАТЬ в ответ на сообщение @ Manik
Похоже, что publishVideo (false) вызываетСобытие videoDisabled будет доступно на подписчике, ЕСЛИ videoType - это камера, но не, если videoType - это экран:
В том же приложении (в том же сеансе) у меня также есть:
var subscriberProperties = {
insertMode: 'append',
width: '100%',
height: '100%'
};
var subscriber = this.openTokSession.subscribe(event.stream,
subscriberDivId,
subscriberProperties,
(error: any) => {
if (error) {
console.log(error);
} else {
subscriber.on('videoDisabled', (event: any) => {
console.log('videoDisabled');
});
}
}
});
... и когда я публикую Video (false) на издателе для камеры, это действительно вызывает событие videoDisabled у подписчика этого потока.
В настоящее время я думаю, что есть ошибка вэкранзапуск потока общих ресурсов или, возможно, publishVideo (false) не подходит для общего потока экрана.
Следующая вещь, которую я собираюсь попробовать, заключается в следующем: Проблема обмена экранами в Tokbox , т. Е. Отмена публикации в сеансе, чтобы посмотреть, вызывает ли это событие, которое я может обработать.
РЕДАКТИРОВАТЬ 2: Для всех, кто боролся с этим, не решил исходную проблему - мое плохое кодирование или неожиданное поведение с TokBox - но заставил подписчика ответить на остановку и запуск совместного использования экрана следующим образом:
Как и раньше:
this.openTokSession.on('streamCreated', (event: any) => {
if(event.stream.videoType === 'screen') {
//it's screen sharing, pop it into the lh panel
var screenSubscriberProperties = {
insertMode: 'append',
width: '100%',
height: '100%'
};
var screenSubscriber = this.openTokSession.subscribe(event.stream,
'screenshareDisplay',
screenSubscriberProperties,
(error: any) => {
if (error) {
console.log(error);
} else {
//code to rearrange UI
}
}
);
} else {
}
Но тогда на издателе, вместо publishVideo(false)
, фактически отменяется публикация:
this.openTokSession.unpublish(this.screenSharingPublisher);
И затем прослушивают это событие:
this.openTokSession.on("streamDestroyed", (event:any) => {
if(typeof(event.stream) !== 'undefined') {
if(event.stream.videoType === 'screen') {
//code to rearrange UI
if (event.reason === 'mediaStopped') {
// User clicked stop sharing
} else if (event.reason === 'forceUnpublished') {
// A moderator forced the user to stop sharing.
}
} else {
//deal with unpublished camera stream
}
}
});