我正在订阅屏幕共享流,如下所示:
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的帖子
如果videoType是摄像机,则看起来publishVideo(false)确实会导致videoDisabled事件在订阅服务器上可用,但如果videoType是screen,则不会:
在同一应用程序(同一会话)中,我还有:
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 screenshare issue,即在会话上取消发布以查看是否会产生我可以处理的事件。
编辑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
}
}
});
答案 0 :(得分:0)
此处是TokBox开发人员的传播者。
作为订阅者,要知道何时禁用流的视频,您应该侦听订阅者对象上的videoDisabled
事件。
您似乎在回调内的订户对象上设置了事件侦听器,这就是事件未触发的原因。您应该在回调函数之外具有以下内容:
subscriber.on('videoDisabled', event => {
console.log('video disabled ', event);
});
请注意,session.subscribe
方法具有回调函数,因此您可以在订阅时知道是否存在同步错误,但是无论错误如何,该方法仍将返回订阅者对象。