Как обнаружить publishVideo (false) в подписчике экрана обмена OpenTok - PullRequest
0 голосов
/ 17 декабря 2018

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

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
            }

        }
    });

1 Ответ

0 голосов
/ 17 декабря 2018

TokBox Developer Evangelist здесь.

Как подписчик, чтобы узнать, когда видео потока было отключено, вы должны прослушать событие videoDisabled на объекте подписчика.

Похоже, вы устанавливаете прослушиватель событий на объект подписчика внутри функции обратного вызова, поэтому событие не запускается.У вас должно быть что-то подобное вне функции обратного вызова:

subscriber.on('videoDisabled', event => {
   console.log('video disabled ', event);
});

Обратите внимание, что метод session.subscribe принимает функцию обратного вызова, чтобы вы могли знать, была ли синхронная ошибка при подписке, но независимо от ошибки, метод по-прежнему будет возвращать объект подписчика.

...