Jet*_*rst 10 javascript jquery youtube-api websocket pusher
背景
我正在尝试将视频集成到幻灯片演示应用程序中.我已禁用学生端的控件,并且有一个播放/暂停按钮连接到YouTube API,以便在单击时通过推送器触发事件,并且视频将在教师屏幕和学生屏幕上启动.
难点
当其中一个用户的互联网连接速度较慢时,就会出现问题.如果教师的互联网速度比学生快,那么视频将不同步.
我的方法
我有一个功能,它使用YouTube API来控制视频的播放和暂停.
/**
*
*/
togglePlay: function(){
var videoId = this.videoId;
if (this.isPlaying) {
this.players[videoId].pauseVideo(); // Pauses the video
this.isPlaying = false;
} else {
this.players[videoId].playVideo(); // Starts the video
this.isPlaying = true;
}
},
Run Code Online (Sandbox Code Playgroud)
在视频对象内部,我添加了一个onStateChange事件监听器,在视频播放/暂停/缓冲时触发.该事件将发送到此功能.
/**
*
*/
emittStateChange: function(e){
switch(e.data) {
// if the teachers video is...
case 1: // playing
pusher.channel4.trigger('client-youtube-triggered', {
videoId: youtube.videoId,
status: 1, // start the students video
});
break;
case 2: // paused
pusher.channel4.trigger('client-youtube-triggered', {
videoId: youtube.videoId,
status: 2, // pause the students video
});
break;
case 3: // buffering
pusher.channel4.trigger('client-youtube-triggered', {
videoId: youtube.videoId,
status: 2, // pause the students video
});
}
},
Run Code Online (Sandbox Code Playgroud)
因此,当教师按下播放时,视频开始并且将游戏事件强制性地发送到上述功能.此功能向学生浏览器发送推送事件,状态为1表示播放视频.此功能接收此事件:
/**
*
*/
receiveStateChange: function(data){
this.videoId = data.videoId;
switch(data.status) {
// if the teachers video is...
case 1: // playing
this.isPlaying = false;
this.togglePlay();
break;
case 2: // paused
this.isPlaying = true;
this.togglePlay();
break;
case 2: // buffering
this.isPlaying = true;
this.togglePlay();
}
},
Run Code Online (Sandbox Code Playgroud)
我的理解
togglePlay() 叫做this.isPlaying = false所以playVideo()被称为onStateChange事件emittStateChange()状态为1 的功能(播放)receiveStateChange()
功能this.isPlaying()设置为false问题:
我想要的是:
当学生视频缓冲时,我只想暂停教师视频直到学生正在播放然后播放两者.我只是不明白我应该如何打破这个在两个视频暂停时结束的循环.
我确信您一次可以发送多个事件。
因此,您可以向老师发送有关哪个学生正在“缓冲”的信息以及任何其他相关信息。
然后,在教师方面,设置一个条件语句来评估该消息。因此,在该功能中,如果存在这种情况,教师玩家将不会向学生发送控制指令。
教师方面也有一个旁路,如果他们认为有必要,他们可以随时停止/暂停所有播放器上的视频。
| 归档时间: |
|
| 查看次数: |
688 次 |
| 最近记录: |