;
(function() {
/**
* 模板
* */
String.prototype.tpl = function() {
var arg = arguments;
var that = this;
for (var i = 0; i < arg.length; i++) {
that = that.replace(new RegExp('\\{' + i + '\\}', "g"), arg[i]);
}
return that;
};
$.fn.livePlayer = function(options) {
return this.each(function() {
if ($(this).data("init-player")) {
return;
}
$(this).data("init-player", true);
var opts = $.extend(true, {}, options);
var $module = $(this)
var id = $module.attr("id");
if (!id) {
alert("must set id!");
return;
}
if (!opts.playUrl) {
// alert("not start!");
return;
}
var playUrl = opts.playUrl
var playImg = opts.playImg
var autoPlay = opts.autoPlay;
var lp = opts.loop;
if(/.m3u8\s*$/.test(playUrl)){
$(this).addClass("live-video-source");
}
var player = initPlayer(playUrl, playImg, id, $module,autoPlay,lp)
$(this).data("init-player", player);
})
}
//初始化直播控件
function initPlayer(playUrl, playImg, id, $module,autoPlay,lp) {
var player = playMuduVideo(playUrl, playImg, id, $module, autoPlay,lp);
var $curWrap = $module.parent();
// initBackUp($module, playUrl)
initBackupBar($module, playUrl)
var playerTimer;
if(autoPlay){
loop();
}else{
$module.find(".mudu-video-wrap").css("background", "#000")
}
initEvent();
/*
*循环检查视频播放问题
*/
function loop() {
clearTimeout(playerTimer);
if (player.getState() !== "playing") {
if ($(window).width() > 750) {
setMute(true);
}
player.play();
} else {
$module.addClass("playing");
$module.find(".mudu-video-wrap").css("background", "#000")
if ($(window).width() > 750) {
setMute(true);
}
return false
}
playerTimer = setTimeout(loop, 1000);
}
/*
*循环检查视频播放问题
*/
function changeVideo(e) {
var collection = $(this).data("collection");
if (collection == 1) {
return;
}
if ($(this).hasClass("firstHover")) {
return;
}
clearTimeout(playerTimer);
playImg = $(this).find(".videoimg>img").attr("src");
playUrl = $(this).data("url");
if (playUrl) {
//点击其他视频开放声音
setMute(false);
player.load([{
file: playUrl,
image: playImg
}])
// initBackUp($(this), playUrl);
initBackupBar($(this), playUrl);
} else {
//没有播放路径就直接链走
var linkSrc = $(this).data("link");
if (linkSrc) {
window.open(linkSrc)
}
}
$curWrap.find(".video-play-area").addClass("playing")
$curWrap.find(".firstHover").removeClass("firstHover");
$(this).addClass("firstHover");
}
/*
*线路数据
*/
function getBackupData($target) {
try {
var backUp = new Function("return " + $target.data("backup"))();
} catch (e) {
console.error(e);
}
if (typeof backUp != "object") {
//兼容报错
backUp = { title: "出了点状况,请切换线路!", changeList: [] }
}
return backUp;
}
/*
*错误显示线路
*/
function initBackUp($target, url) {
var tactic = $target.data("tactic");
var backUp = getBackupData($target);
var btns = ['
', "", "
"];
$.each(backUp.changeList, function(idx, obj) {
if (url && url == obj.url) {
btns[1] += ' {0} '.tpl(obj.name, obj.url, tactic, $target.data("backup"));
} else if (!url && idx == 0) {
btns[1] += ' {0} '.tpl(obj.name, obj.url, tactic, $target.data("backup"));
} else {
btns[1] += ' {0} '.tpl(obj.name, obj.url, tactic, $target.data("backup"));
}
});
$(".mudu-error-wrap2").remove();
if (btns[1]) {
$(".mudu-reset.mudu-error-wrap").after("".tpl(backUp.title, btns.join("")));
} else {
$(".mudu-reset.mudu-error-wrap").after("".tpl(backUp.title));
}
initBackupEvent($(".mudu-error-wrap2"));
}
/*
*初始化线路bar
*/
function initBackupBar($target, url) {
var activeText;
var tactic = $target.data("tactic");
var backUp = getBackupData($target);
var btns = ['', "", "
"];
$.each(backUp.changeList, function(idx, obj) {
if (url && url == obj.url) {
activeText = obj.name;
btns[1] += ' {0} '.tpl(obj.name, obj.url, tactic, $target.data("backup"))
} else if (!url && idx == 0) {
activeText = obj.name;
btns[1] += ' {0} '.tpl(obj.name, obj.url, tactic, $target.data("backup"))
} else {
btns[1] += ' {0} '.tpl(obj.name, obj.url, tactic, $target.data("backup"))
}
})
activeText = activeText;
var notFindActive = false;
if (!activeText) {
activeText = backUp.changeList.length && backUp.changeList[0].name;
notFindActive = true;
}
$(".mudu-backup-group").remove();
if (btns[1]) {
$curWrap.find(".mudu-icon-fullscreen").before("{0}{1}
".tpl(btns.join(""), activeText))
}
if (notFindActive) {
$(".mudu-backup-group").find(".J-live-videoPlay").eq(0).addClass("active");
}
initBackupEvent($(".mudu-backup-group"));
}
/*
*初始化bar线路事件
*/
function initBackupEvent($target) {
$target.find(".J-live-videoPlay").off("click").on("click", function(e) {
changeVideo.call(this, e);
return false;
})
}
/*
*初始化play
*/
function playMuduVideo(url, img, contentId, $module, autoplay,loop) {
return new Mudu.Player({
// 必须,播放器容器ID,播放器会被添加到该DOM元素中
containerId: contentId,
// 必须,播放器视频播放地址
src: url,
// 非必须,播放器海报图 string
image: img,
// 已废弃该参数,请勿使用
type: 'live',
// 非必须,播放器是否自动播放,默认false
autoplay: autoplay ? true : false,
// 非必须,播放器是否显示控制条,默认true
controls: true,
// 非必须,播放器是否循环播放, 默认false
repeat: loop?true:false,
// 非必须,播放器宽度,单位为像素,默认为480
width: "100%",
// 非必须,播放器高度,单位为像素,默认为270
height: "100%",
// 以下x5Layer和x5Inline两个参数用于解决安卓微信、QQ、QQ浏览器的只能全屏播放的问题。参数仅对安装过tbs(腾讯浏览服务,一般安装过QQ浏览器后手机上会存在)手机生效(由于tbs的api限制,部分低版本的微信、QQ、QQ浏览器可能不会生效),未安装tbs的安卓手机不会有只能全屏播放的问题。
// x5Layer和x5Inline只能有一个被设置为true
// 非必须,播放器在安卓微信、QQ、QQ浏览器中是否同层播放, 默认false (注:同层播放时,页面document无法滚动(内部的dom元素可以),如果播放器宽度小于浏览器宽度,两边将出现黑边)
x5Layer: false,
// 非必须,播放器在安卓微信、QQ、QQ浏览器中是否inline播放,默认false (注:inline播放时,播放器始终处于z-index的最上层,因此无法在播放器上叠加元素)
x5Inline: false
});
}
/**
* 自动播放静音
*/
function setMute(flag) {
// init
var $icon = $module.find(".firstMutedIcon");
if (!$icon.length) {
$module.append("
");
$icon = $module.find(".firstMutedIcon");
$icon.click(function() {
setMute(false);
$(this).hide()
return false
})
}
//set
if (player.getMute() !== flag) {
player.setMute(flag);
if (flag) {
$icon.show();
} else {
$icon.hide()
}
}
}
/**
* 初始化事件
*/
function initEvent() {
$module.on("click", function(e) {
if (player.getState() !== "playing") {
player.play();
$module.addClass("playing");
$module.find(".mudu-video-wrap").css("background", "#000")
} else {
player.pause();
$module.removeClass("playing")
}
})
//先执行 用于阻止.video-play-area点击事件
$module.find(".mudu-controller").click(function(e) {
return false;
})
$module.find(".mudu-volume").click(function(e) {
if (player.getMute()) {
$module.find(".firstMutedIcon").show();
} else {
$module.find(".firstMutedIcon").hide()
}
})
//控制按钮
player.On(
'Player.Play',
// 事件处理函数,参数为当前player组件对象
function(player) {
if (player.getState() == "playing") {
$module.addClass("playing");
$module.find(".mudu-video-wrap").css("background", "#000")
}
}
)
player.On(
"Player.Stoped",
function(player) {
$module.removeClass("playing");
}
)
player.On(
"Player.Ended",
function(player) {
$module.find(".mudu-background").show()
}
)
}
return player
}
})();