<!DOCTYPE html>
< html >
< head >
< meta charset = "UTF-8" >
< title > ACG.WATCH Player< / title >
< link rel = "stylesheet" href = "https://cdn.jsdelivr.net/npm/awsm.css@3.0.4/dist/awsm_theme_pearl-lusta.min.css" >
< link rel = "stylesheet" type = "text/css" href = "https://cdn.jsdelivr.net/npm/dplayer@1.25.0/dist/DPlayer.min.css" >
< script type = "text/javascript" > block _aplayer = true ; lang = [ 'zh' , 'en' ] ; < / script >
< script src = "https://cdn.yimian.xyz/ushio-js/ushio-head.min.js" > < / script >
< script type = "text/javascript" > page . proj = 'iotcat/player' ; < / script >
< / head >
< body >
< header >
< h1 > ACG.WATCH< / h1 >
< p > < span class = ".zh" > < abbr title = "在 ACG.WATCH" > 可调教< / abbr > 的在线视频播放器< / span > < span class = ".en" > Watch ACG video < abbr title = "At ACG.WATCH" > ONLINE< / abbr > < / span > < / p >
< nav >
< ul >
< li > < a href = "../" aria-hidden = "false" > < span class = ".zh" > 主页< / span > < span class = ".en" > Homepage< / span > < / a > < / li >
< li > < a href = "../list.html" > < span class = ".zh" > 列表< / span > < span class = ".en" > Playlist< / span > < / a > < / li >
< li > < a href = "https://iotcat.me/" > < span class = ".zh" > 关于我< / span > < span class = ".en" > About Me< / span > < / a > < / li >
< / ul >
< / nav >
< / header >
< main >
< article >
< section >
< div id = "dplayer" > < / div >
< aside >
< p >
< strong > D.L.< / strong >
< a href = "javascript:window.open(page.params.url);" > < span class = ".zh" > 点击这里下载此视频~< / span > < span class = ".en" > You can download this video from here..< / span > < / a >
< / p >
< / aside >
< / section >
< section >
< p > < span class = ".zh" > 视频名称< / span > < span class = ".en" > Name< / span > < / a > : < span id = "video_name" > < span class = ".zh" > 未知< / span > < span class = ".en" > Unkonwn..< / span > < / span > < / p >
< / section >
< section >
< button onClick = "next_video()" > < span class = ".zh" > 下一集< / span > < span class = ".en" > Next< / span > < / button >
< button onClick = "window.location.href='../'" > < span class = ".zh" > 主页< / span > < span class = ".en" > Homepage< / span > < / button >
< / section >
< section >
< details >
< summary > < span class = ".zh" > 展开视频参数< / span > < span class = ".en" > Show Video Params< / span > < / summary >
< p > < span class = ".zh" > 以下是实时视频参数哦^_^< / span > < span class = ".en" > Instant video params ^_^< / span > < / p >
< table >
< thead >
< tr >
< th > < span class = ".zh" > 名称< / span > < span class = ".en" > Params< / span > < / th >
< th > < span class = ".zh" > 值< / span > < span class = ".en" > Value< / span > < / th >
< / tr >
< / thead >
< tbody >
< tr >
< td > Video_Vid< / td >
< td id = "video_vid" > < / td >
< / tr >
< tr >
< td > Video_Class< / td >
< td id = "video_class" > < / td >
< / tr >
< tr >
< td > Video_Series< / td >
< td id = "video_series" > < / td >
< / tr >
< tr >
< td > Video_No< / td >
< td id = "video_no" > < / td >
< / tr >
< tr >
< td > Video_Name< / td >
< td id = "video_name2" > < / td >
< / tr >
< tr >
< td > Video_Link< / td >
< td id = "video_link" > < / td >
< / tr >
< tr >
< td > Video_description< / td >
< td id = "video_description" > < / td >
< / tr >
< tr >
< td > Video_DanmakuId< / td >
< td id = "video_danmaku" > < / td >
< / tr >
< tr >
< td > Video_QualityOptions< / td >
< td id = "video_quality" > < / td >
< / tr >
< tr >
< td > Video_PlayFrom< / td >
< td id = "video_playFrom" > < / td >
< / tr >
< tr >
< td > Player_Width< / td >
< td id = "player_width" > < / td >
< / tr >
< tr >
< td > Player_Height< / td >
< td id = "player_height" > < / td >
< / tr >
< tr >
< td > Player_CurrentTime< / td >
< td id = "player_currentTime" > < / td >
< / tr >
< tr >
< td > Player_Duration< / td >
< td id = "player_duration" > < / td >
< / tr >
< tr >
< td > Player_Volume< / td >
< td id = "player_volume" > < / td >
< / tr >
< tr >
< td > Player_Paused< / td >
< td id = "player_paused" > < / td >
< / tr >
< tr >
< td > Danmaku_Num< / td >
< td id = "danmaku_danIndex" > < / td >
< / tr >
< tr >
< td > Danmaku_Opacity< / td >
< td id = "danmaku_opacity" > < / td >
< / tr >
< tr >
< td > Danmaku_NumBottom< / td >
< td id = "danmaku_numBottom" > < / td >
< / tr >
< tr >
< td > Danmaku_NumRight< / td >
< td id = "danmaku_numRight" > < / td >
< / tr >
< tr >
< td > Danmaku_NumTop< / td >
< td id = "danmaku_numTop" > < / td >
< / tr >
< / tbody >
< / table >
< / details >
< / section >
< / article >
< / main >
< footer >
< p style = "text-align: center;" > Powered By < a href = "https://ushio.yimian.xyz" > Ushio< / a > | Made with love by < a href = "https://iotcat.me" > iotcat< / a > < / p >
< br >
< / footer >
< script src = "https://cdn.yimian.xyz/ushio-js/ushio-footer.min.js" > < / script >
< script src = "https://cdn.jsdelivr.net/npm/hls.js@latest" > < / script >
< script src = "https://cdn.jsdelivr.net/npm/flv.js@1.5.0/dist/flv.min.js" > < / script >
< script src = "https://cdn.dashjs.org/latest/dash.all.min.js" > < / script >
< script src = "https://cdn.jsdelivr.net/npm/webtorrent@latest/webtorrent.min.js" > < / script >
< script src = "https://cdn.jsdelivr.net/npm/dplayer@1.25.0/dist/DPlayer.min.js" > < / script >
< script type = "text/javascript" >
$(function(){
var options = {
container: document.getElementById('dplayer'),
theme: '#'+('00000'+ (Math.random()*0x1000000< < 0 ) . toString ( 16 ) ) . substr ( -6 ) ,
logo: 'https://cdn.yimian.xyz/img/logo/logo_white.png',
lang: ((page.tran.getLang() == 'zh')?'zh-cn':'en'),
autoplay: true,
video: {
pic: 'https://api.yimian.xyz/img/?size=1920x1080',
quality: [],
defaultQuality: 0,
playFrom: 0
},
danmaku: {
id: $.md5(page.params.url+'').substr(0, 8),
api: 'https://api.yimian.xyz/danmaku/',
maximum: 1000,
addition: [],
user: 'iotcat',
bottom: '15%',
unlimited: true,
}
};
/* if no GET video url */
session.onload(()=>{
if(Object.keys(page.params).length === 0 || !page.params.hasOwnProperty("url")){
if(!session.get('acg/last_watch')){
page.params.url = "https://cdn.yimian.xyz/video/404.mp4";
}else{
page.params.url = session.get('acg/last_watch');
history.pushState({},page.title,"https://acg.watch/player?url="+session.get('acg/last_watch'));
}
}else{
session.set('acg/last_watch', page.params.url);
}
});
var dp = {};
var isWaiting = false;
$.get("https://acg.watch/api/getVideoByUrl?url="+page.params.url, function(res){
//res = JSON.parse(res);
options.video.quality = getQuality(res);
options.danmaku.id = res.danmakuID;
options.danmaku.addition = (res.hasOwnProperty('danmakuAdd'))?res.danmakuAdd:[];
dp = new DPlayer(options);
/* recover history playing */
if(options.video.quality[0].url & & options.video.quality[0].url != 'https://cdn.yimian.xyz/video/404.mp4'){
session.onload(()=>{
if(session.get($.md5(options.video.quality[0].url)) != null){
dp.seek(session.get($.md5(options.video.quality[0].url)));
options.video.playFrom = session.get($.md5(options.video.quality[0].url));
if(page.tran.getLang() == 'zh')
dp.notice("已恢复到上次播放位置", 4000);
else
dp.notice("Video recovered from Cloud..", 4000);
}
});
}
/* record seek point */
setInterval(function(){
if(!dp.video.paused & & dp.video.currentTime > 10){
session.onload(()=>{
session.set($.md5(options.video.quality[0].url), dp.video.currentTime);
});
}
}, 8000);
/* print info */
getInfo(res);
/* next video */
dp.on('ended', next_video);
/* if waiting change source */
dp.on('waiting', waitEvent);
dp.on('playing', function(){
isWaiting = false;
});
});
next_video = function() {
session.onload(()=>{
session.set($.md5(options.video.quality[0].url), "0");
$.get("https://acg.watch/api/getNextByUrl?url="+options.video.quality[1].url, function(res){
//res = JSON.parse(res);
if(page.tran.getLang() == 'zh')
dp.notice("正在跳转至下一集", 4000);
else
dp.notice("Jumping to the next episode", 4000);
setTimeout(function(){
session.set('acg/last_watch', res.url);
history.pushState({},page.title,"https://acg.watch/player?url="+res.url);
page.params.url = res.url;
//res2 = JSON.parse(res2);
options.video.quality = getQuality(res);
options.danmaku.id = res.danmakuID;
options.danmaku.addition = (res.hasOwnProperty('danmakuAdd'))?res.danmakuAdd:[];
options.video.defaultQuality = 0;
options.video.playFrom = 0;
dp.switchVideo(
{
url: res.url,
quality: getQuality(res),
defaultQuality: 0
},
{
id: res.danmakuID,
api: 'https://api.yimian.xyz/danmaku/',
maximum: 1000,
addition: (res.hasOwnProperty('danmakuAdd'))?res.danmakuAdd:[],
user: 'iotcat',
bottom: '15%',
unlimited: true,
}
);
/* print info */
getInfo(res);
//setTimeout(function(){dp.switchQuality(0);}, 1000);
}, 2000);
});
});
}
var getQuality = function(res){
var quality = [
{
name: ((page.tran.getLang() == 'zh')?"自动":'Auto'),
url: 'https://api.yimian.xyz/video/?url='+res.url
},
{
name: ((page.tran.getLang() == 'zh')?"直链":'Origin'),
url: res.url
},
{
name: ((page.tran.getLang() == 'zh')?"代理":'Proxy'),
url: 'https://proxy.yimian.xyz/get/?url='+btoa(res.url)
}
];
if(res.hasOwnProperty('extra') & & res.extra.length > 0){
for(var i = 0; i < res.extra.length ; i + + ) {
quality.push({
name: ((page.tran.getLang() == 'zh')?"备选"+i+'_直链':'Backup '+i+'_origin'),
url: res.extra[i]
});
quality.push({
name: ((page.tran.getLang() == 'zh')?"备选"+i+'_代理':'Backup '+i+'_proxy'),
url: 'https://proxy.yimian.xyz/get/?url='+btoa(res.extra[i])
});
}
}
return quality;
}
var getInfo = function(res){
printInfo(res);
}
var printInfo = function(res){
$('#video_name').html(res.name);
$('#video_name2').html(res.name);
$('#video_class').html(res.class);
$('#video_series').html(res.seriesID);
$('#video_no').html(res.no);
$('#video_vid').html(res.vid);
$('#video_link').html(res.url);
$('#video_description').html(res.description);
$('#video_quality').html(options.video.quality.length);
$('#video_playFrom').html(options.video.playFrom);
}
var autoSwitchQuality = function(){
if(isWaiting & & options.video.quality.length > 1){
waitEvent(15000);
if(options.video.defaultQuality >= options.video.quality.length - 1){
return;
}
if(page.tran.getLang() == 'zh')
dp.notice("监测到卡顿,切换片源");
else
dp.notice("Detected freeze, trying another source");
options.video.defaultQuality = (options.video.defaultQuality >= options.video.quality.length - 1) ? options.video.defaultQuality : options.video.defaultQuality+1;
console.log('Switch quality to ' + options.video.defaultQuality);
dp.switchQuality(options.video.defaultQuality);
}
}
var waitEvent = function(t = 6000){
isWaiting = true;
if(page.timezone == "Asia/Shanghai") autoSwitchQuality();
setTimeout(function(){
if(dp.video.currentTime > options.video.playFrom + 10){
autoSwitchQuality();
}else{
setTimeout(autoSwitchQuality, 9000);
}
}, t);
};
/* print player and danmaku info */
setInterval(function(){
$('#danmaku_numRight').html(Object.keys(dp.danmaku.danTunnel.right).length);
$('#danmaku_numBottom').html(Object.keys(dp.danmaku.danTunnel.bottom).length);
$('#danmaku_numTop').html(Object.keys(dp.danmaku.danTunnel.top).length);
$('#danmaku_opacity').html(dp.danmaku._opacity);
$('#danmaku_danIndex').html(dp.danmaku.danIndex);
$('#video_danmaku').html(options.danmaku.id);
$('#player_width').html(dp.video.videoWidth);
$('#player_height').html(dp.video.videoHeight);
$('#player_volume').html(dp.video.volume);
$('#player_paused').html((dp.video.paused)?"true":"false");
$('#player_currentTime').html(dp.video.currentTime);
$('#player_duration').html(dp.video.duration);
}, 1000);
});
< / script >
< / body >
< / html >