我正在制作一个简单的多用户播放列表应用程序。我有一个客户正在观看视频流,而在另一个客户中,我正在尝试将视频添加到该播放列表中。视频正确添加到播放列表,但是当更新发生时,页面重新呈现并且视频在刚刚观看的客户端上重新启动。我正在尝试获取它,以便当其他用户将视频添加到播放列表时,它会继续为所有正在观看它的人播放。
在我的服务器上:
Meteor.publish('videosQue', function (room_id) {
return Videos.find({room_id: room_id});
});
在客户端上,我像 todo 示例一样设置它:
var videosHandle = null;
Deps.autorun(function(){
var room_id = Session.get('room_id');
if (room_id)
videosHandle = Meteor.subscribe('videosQue', room_id);
else
videosHandle = null;
});
下面是一些适用于一个人在房间里的代码:
Template.EnteredRoom.loading = function () {
return videosHandle && !videosHandle.ready();
};
Template.EnteredRoom.room = function () {
return Rooms.findOne(Session.get('room_id'));
};
Template.EnteredRoom.video_objs = function () {
Session.set('videos', Videos.findOne({room_id: Session.get('room_id')}))
return Session.get('videos');
};
Template.EnteredRoom.rendered = function () {
if (Session.get('videos') && Session.get('videos').videoIds.length) {
var currVid = 0, playlist = Session.get('videos').videoIds;
renderVid(playlist, currVid);
};
};
var renderVid = function(playlist, currVid) {
var video = Popcorn.youtube('#youtube-video', 'http://www.youtube.com/embed/' + playlist[currVid] + '&autoplay=1');
video.on("ended", function() {
if (++currVid < playlist.length)
renderVid(playlist, currVid);
else {
$('#youtube-video').hide();
$('#video-container').append('<div style="font-size:30px;color:white;">No Videos :( Try adding one!</div>');
}
});
}
有没有办法完成这件事?
谢谢您的帮助!
安德鲁
编辑:在做了一些阅读之后,我认为我应该以某种方式使用隔离来实现这一点,有什么建议吗?