define(function(require, exports) { var movieTemplate = ''; var musicTemplate = ''; var MUSIC = 'music-player'; var MOVIE = 'movie-player'; var appStatic; var create = function(playerType){ var ico = playerType == MUSIC?'mp3':'mp4'; var selector = '.'+playerType+'-dialog'; var template = movieTemplate; var size = {width:'70%',height:'60%'}; if(playerType == MUSIC){ template = musicTemplate; size = {width:'360px',height:'500px'}; } var dialog = $.dialog({ id:playerType+'-dialog', simple:true, ico:core.icon(ico), title:'player', disableTab:true, width:size.width, height:size.height, content:template, resize:true, padding:0, fixed:true, close:function(){ var player = getPlayer(playerType); player && player.jPlayer("destroy");//.jPlayer("pause"); return false } }); dialog.DOM.wrap.addClass('my-jPlayer'); return $(selector).find(".jPlayer-container"); }; var getPlayerType = function(ext){ if (ext =='music' ) return MUSIC; if (ext == undefined) ext = 'mp3'; if (_.includes(['mp3','wav','aac', 'm4a','oga','ogg','webma','m3u8a','m3ua','flac'],ext)) { return MUSIC; }else { return MOVIE; } }; var getPlayer = function(playerType){ var $content = $('.'+playerType+'-dialog .jPlayer-container'); if($content.length == 0 ) return false; return $content; } /* html5:mp3,webma,oga,ogg,wav | webmv,ogv,m4v,mp4,mov flash:mp3,m4a,m4v,mov,mp4,flv Safari:mp3,m4a | mp4,m4v,mov Chrome,Firefox: mp3,m4a,webma,oga,wav | webmv,ogv,m4v,mp4,mov IE9:mp3,m4a | m4v,mp4 */ var getMedia = function(item){ var typeArr = { 'mp4' : 'm4v', 'm4v' : 'm4v', 'mov' : 'm4v', 'ogv' : 'ogv', 'webm': 'webmv', 'webmv':'webmv', 'flv' : 'flv', 'fla' : 'flv', 'f4v' : 'flv', 'flac': 'flac', 'f4a' : 'flv', 'mp3' : 'mp3', 'wav' : 'wav', 'm4a' : 'mp3', 'aac' : 'mp3', 'ogg' : 'oga', 'oga' : 'oga', 'webma':'webma' }; var ext = item['ext']; var key = typeArr[ext]; var media = { 'extType':key, 'title':item['name'], 'url':item['url'],path:item.path, 'solution' : (ext=='flv' || ext == 'f4v') ? "flash" : "html,flash" } media[key] = item['url']; return media; } var playStart = function(player,media){ if(!media) return; var $playerBox = player.parents('.jPlayer'); var config = { solution:media.solution, //solution:'flash', swfPath: appStatic+"jPlayer/jquery.jplayer.swf", volume: 0.8, //默认音量 muted: false, } $playerBox.attr('id',UUID()); player.jPlayer("destroy"); player.find(".jPlayer-container").children().remove(); var playerConfig = jPlayerConfigInit($playerBox,config); // 回调处理; var dialog = $playerBox.parents('.my-jPlayer').data('artDialog'); var isMovie = $playerBox.parents('.movie-player-dialog').length == 1; if( dialog && isMovie){ var playLoaded = playerDialogResize($playerBox,dialog,false); playerConfig.loadedmetadata = function(){ dialog.size('70%','80%');// playLoaded(); }; } player.jPlayer(playerConfig); if(player.find('object').length > 0){ $playerBox.addClass('flashPlayer'); }else{ $playerBox.removeClass('flashPlayer'); } //delay start play; player.jPlayer("setMedia",media); player.jPlayer("play"); jPlayerBindControl($playerBox); $playerBox.find('audio').attr('autoplay','autoplay').removeAttr('muted'); // plaryer.mute(false);//取消静音;兼容android; if(window.kodApp && kodApp.mediaAutoPlay === false){player.jPlayer("pause");} if(window.kodApp && kodApp.videoLoadSmall && isMovie){ // kodApp.videoLoadSmall(media.path,kodApp,$playerBox,function(normalSrc,size){ // if(!normalSrc){return;} // media[media.extType] = normalSrc; // player.jPlayer("setMedia",media);player.jPlayer("play"); // }); } //移动端;微信,safari等屏蔽了自动播放;首次点击页面触发播放; //$playerBox.find('.aui-content').one("touchstart mousedown",play); if(dialog){ setTimeout(function(){ var ext = pathTools.pathExt(media.title); dialog.title(core.icon(ext) + media.title); },100); } } /** * 根据视频尺寸,自动调整窗口尺寸及位置,确保视频能够完整显示 * * 1. 对话框全屏后才加载完成, 不处理尺寸; * 2. 对话框全屏后才加载完成,再次还原窗口时处理视频尺寸; */ var playerDialogResize = function($player,dialog,animate){ var isReset = false; if(!dialog) return; // 已经重置过尺寸的不再重置, 视频未加载完成不重置, 最大化时不重置; var resetSize = function(fileLoad){ if(isReset && !fileLoad) return; if(!dialog.$main || dialog.$main.hasClass('dialog-max')) return; isReset = true; var $video = $player.find('video'); var vWidth = $video.width(); var vHeight = $video.height(); var wWidth = $(window).width() * 0.9; var wHeight = $(window).height() * 0.9; if(vHeight >= wHeight){ vWidth = (wHeight * vWidth) / vHeight; vHeight = wHeight; } if( vWidth >= wWidth ){ vHeight = (wWidth * vHeight) / vWidth; vWidth = wWidth; } var left = ($(window).width() - vWidth) / 2; var top = ($(window).height() - vHeight) / 2; if(animate){ var maxClass = 'dialog-change-max'; dialog.$main.removeClass(maxClass).addClass(maxClass); setTimeout(function(){dialog.$main.removeClass(maxClass);},350); } dialog.size(vWidth,vHeight).position(left,top); // console.error(202,[vWidth,vHeight],[left,top],dialog.$main.attr('class')); } var clickMaxBefore = _.bind(dialog._clickMax,dialog); dialog._clickMax = function(){ clickMaxBefore(); setTimeout(function(){ if(dialog.$main.hasClass('dialog-max')) return; resetSize(); },350); //尺寸调整动画完成后处理; } return function(){resetSize(true);}; }; var play = function(list){ playerLoad(); var ext = list[0]['ext']; var playerType = getPlayerType(ext); var player = getPlayer(playerType); var media = getMedia(list[0]); if(!player){ player = create(playerType); if(playerType == MUSIC){ musicPlayer.init(); } } if(playerType == MUSIC){ media = musicPlayer.insert(player,list,ext); } playStart(player,media); try{ $.dialog.list[playerType+'-dialog'].display(true); }catch(e){}; } var musicPlayer = (function(){ var playList = []; var playCurrent = 0; var player = null; var loopType = 'circle';//circle,rand // 播放列表记录; 按用户区分; 如果为外链分享则按外链分享id区分; var storeList = function(setValue){ var storeKey = 'jplayerMusicList';var _storeKey = storeKey; if(window.G && window.G.user && window.G.user.userID){storeKey += '-user-'+G.user.userID;} if(window.App && window.App.shareID){storeKey = _storeKey + '-share-'+App.shareID;} // console.error(103,storeKey,playList,LocalData.getConfig(storeKey,[])); if(setValue){return LocalData.setConfig(storeKey,playList);} var listData = LocalData.getConfig(storeKey,[]); if(!listData || !listData.length){listData = [];} return listData; } var insert = function(thePlayer,list){ if(playList.length == 0){playList = storeList();} player = thePlayer; var findIndex = -1; for (var i = 0; i < list.length; i++) {//插入后默认播放列表的最后一个 var exists = false; var find = 0; for (find = 0; find < playList.length; find++) { if(playList[find]['url'] == list[i]['url']){ exists = true;findIndex = find; break; } } // 已存在则不插入 // 插入后默认播放列表的最后一个;最后一个已存在则不做处理 if(exists){ if(i == list.length - 1){ if(playCurrent != find){ playIndex(find); } } continue; } playList.push( getMedia(list[i])); } playCurrent = (findIndex == -1) ? (playList.length-1) : findIndex; updateView(true); storeList(true); return playList[playCurrent]; } var playIndex = function(index){ index = index <= 0 ? 0 : index; index = index >= playList.length-1 ? playList.length-1 : index; playCurrent = index; var media = playList[index]; playStart(player,media); updateView(false); } var playAt = function(type){ switch(loopType){ case 'circle': if(type == 'next'){ if(playCurrent < playList.length-1){ playIndex(playCurrent+1); }else{ playIndex(0); } }else{//prev if(playCurrent-1 < 0){ playIndex(playList.length-1); }else{ playIndex(playCurrent-1); } } break; case 'rand':playIndex(roundFromTo(0,playList.length)-1);break; case 'one':playIndex(playCurrent);break; default:break; } } var remove = function(index){ playList.splice(index,1); playIndex(index); updateView(true); storeList(true); } var download = function(index){ var media = playList[index]; var url = media.url+'&download=1'; kodApp.download(url); } var init = function(){ playCurrent = 0; playList = []; loopType = 'circle'; var $playBox = $('.jPlayer-music'); var arr = [ {icon:"ri-repeat-line-2",loop:'circle'}, {icon:"ri-shuffle-line",loop:'rand'}, {icon:"ri-repeat-one-line loop-one",loop:'one'}, ]; $playBox.find('.change-loop').unbind('click').bind('click',function(){ var index = parseInt($(this).attr('data-loop')) + 1; index = index < 0 ? 0 : index; index = index >= arr.length ? 0 : index; var cell = arr[index]; $(this).attr('data-loop',index).find('i').attr('class',cell.icon); loopType = cell.loop; }); $playBox.find('.play-backward').unbind('click').bind('click',function(){ playAt('prev'); }); $playBox.find('.play-forward').unbind('click').bind('click',function(){ playAt('next'); }); $playBox.find('.show-list').unbind('click').bind('click',function(e){ $playBox.parents('.music-player-dialog').toggleClass('hide-play-list'); stopPP(e); }); $playBox.find('.play-list .item').die('click').live('click',function(e){ var index = $(this).index(); playIndex(index); stopPP(e); }); $playBox.find('.play-list .remove').die('click').live('click',function(e){ var $item = $(this).parents('.item'); var index = $item.index(); $item.remove(); remove(index); stopPP(e); return false; }); $playBox.find('.play-list .download').die('click').live('click',function(e){ var index = $(this).parents('.item').index(); download(index); stopPP(e); return false; }); // $.hoverAnimate({el:'.play-list .item',delegate:$playBox}); } var updateView = function(resetList){ var $playBox = $(player).parents('.jPlayer'); if(resetList){ var html = ''; $.each(playList,function(i,val){ html += '