增加一套新的p2p播放器
This commit is contained in:
parent
166a15d527
commit
4a8cd1e49b
@ -61,6 +61,11 @@ def custom_player3():
|
||||
ctx = getParmas()
|
||||
return render_template('player/p2pplayer/index.htm', ctx=ctx)
|
||||
|
||||
@web.route('/player4')
|
||||
def custom_player4():
|
||||
ctx = getParmas()
|
||||
return render_template('player/p2phls/p2phls.html', ctx=ctx)
|
||||
|
||||
@web.route('/<web_name>/<theme>')
|
||||
def web_index(web_name, theme):
|
||||
ctx = {'web_name': web_name, 'key': '关键词', 'description': '描述'}
|
||||
|
||||
@ -217,6 +217,7 @@
|
||||
<a href="/web/player1?url=" class="btn-player" target="_blank">MUI播放器</a>
|
||||
<a href="/web/player2?url=" class="btn-player" target="_blank">P2P播放器</a>
|
||||
<a href="/web/player3?url=https://vip.ffzyread1.com/20230601/13234_55ed2d56/index.m3u8" class="btn-player" target="_blank">P2P播放器-GO</a>
|
||||
<a href="/web/player4?url=" class="btn-player" target="_blank">P2P播放器-hls</a>
|
||||
<div class="nav">
|
||||
<!-- 列表 -->
|
||||
<ul>
|
||||
|
||||
1
templates/player/p2phls/cbplayer2.js
Normal file
1
templates/player/p2phls/cbplayer2.js
Normal file
File diff suppressed because one or more lines are too long
1
templates/player/p2phls/hls.min.js
vendored
Normal file
1
templates/player/p2phls/hls.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
templates/player/p2phls/jquery.min.js
vendored
Normal file
2
templates/player/p2phls/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
templates/player/p2phls/loading_pc.jpg
Normal file
BIN
templates/player/p2phls/loading_pc.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 127 KiB |
174
templates/player/p2phls/p2phls.html
Normal file
174
templates/player/p2phls/p2phls.html
Normal file
@ -0,0 +1,174 @@
|
||||
<meta charset="UTF-8">
|
||||
<style type="text/css">
|
||||
body,html{width:100%;height:100%;background:#000;padding:0;margin:0;overflow-x:hidden;overflow-y:hidden}
|
||||
*{margin:0;border:0;padding:0;text-decoration:none}
|
||||
|
||||
#video {
|
||||
position:inherit;
|
||||
}
|
||||
|
||||
.total {position: absolute;top: 1px;left: 10px;color: #fff;font-size: 13px;}
|
||||
|
||||
/* 移动设备自适应宽高 */
|
||||
@media only screen and (max-width: 650px) {
|
||||
#list {
|
||||
width: 100%;
|
||||
left: 0px;
|
||||
max-width: 100%;
|
||||
min-width: auto;
|
||||
}
|
||||
#video {
|
||||
height: 100% !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
.total {position: absolute;top: 0px;left: 10px;color: #fff;font-size: 12px;}
|
||||
}
|
||||
|
||||
#time {
|
||||
display: none;
|
||||
right: 10px;
|
||||
text-align: center;
|
||||
top: 3px;
|
||||
font-size: 12px;
|
||||
color: #fdfdfd;
|
||||
text-shadow: 1px 1px 1px #000, 1px 1px 1px #000;
|
||||
position: fixed;
|
||||
z-index: 2147483645;
|
||||
}
|
||||
.masked h4{
|
||||
display: block;
|
||||
/*渐变背景*/
|
||||
background-image: -webkit-linear-gradient(left, #3498db, #f47920 10%, #d71345 20%, #f7acbc 30%,
|
||||
#ffd400 40%, #3498db 50%, #f47920 60%, #d71345 70%, #f7acbc 80%, #ffd400 90%, #3498db);
|
||||
color: transparent; /*文字填充色为透明*/
|
||||
-webkit-text-fill-color: transparent;
|
||||
-webkit-background-clip: text; /*背景剪裁为文字,只将文字显示为背景*/
|
||||
background-size: 200% 100%; /*背景图片向水平方向扩大一倍,这样background-position才有移动与变化的空间*/
|
||||
/* 动画 */
|
||||
animation: masked-animation 4s infinite linear;
|
||||
}
|
||||
@keyframes masked-animation {
|
||||
0% {
|
||||
background-position: 0 0; /*background-position 属性设置背景图像的起始位置。*/
|
||||
}
|
||||
100% {
|
||||
background-position: -100% 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<div id="video"></div>
|
||||
<div class="total">
|
||||
<div class="masked">
|
||||
<h4><div id="stats"></div></h4>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/web/player/p2phls/hls.min.js"></script>
|
||||
<script src="/web/player/p2phls/cbplayer2.js"></script>
|
||||
<script src="/web/player/p2phls/jquery.min.js"></script>
|
||||
<script>
|
||||
var _peerId = '', _peerNum = 0, _totalP2PDownloaded = 0, _totalP2PUploaded = 0;
|
||||
var m3u8url = document.location.href.split("url=")[1];
|
||||
var player = new CBPlayer({
|
||||
container: document.getElementById('video'),
|
||||
autoplay: true, //视频自动播放
|
||||
live: false, //开启直播模式
|
||||
lang: 'zh-cn', //语言
|
||||
hotkey: true, //开启热键,支持快进、快退、音量控制、播放暂停
|
||||
airplay: true, //在 Safari 中开启 AirPlay
|
||||
screenshot: false, //开启截图,如果开启,视频和视频封面需要允许跨域
|
||||
preload: 'auto', //视频预加载,可选值: 'none', 'metadata', 'auto'
|
||||
danmaku: true,
|
||||
|
||||
video: {
|
||||
pic: "/web/player/p2phls/loading_pc.jpg",
|
||||
url: m3u8url||'https://vip.ffzyread1.com/20230601/13234_55ed2d56/index.m3u8',
|
||||
},
|
||||
pluginOptions: {
|
||||
hls: {
|
||||
//maxBufferSize: 0,
|
||||
//maxBufferLength: 10,
|
||||
//liveSyncDurationCount: 15,
|
||||
|
||||
p2pConfig: {
|
||||
// logLevel: true,
|
||||
live: false,
|
||||
geoIpPreflight: false, //向在线IP数据库请求ASN等信息,从而获得更准确的调度,会延迟P2P启动时间。
|
||||
useHttpRange: false, //用于补足p2p下载超时的剩余部分数据
|
||||
sharePlaylist: true, //是否允许m3u8文件的P2P传输。
|
||||
diskCacheLimit: {"pc": 2500 * 1024 * 1024, "mobile": 1500 * 1024 * 1024}, //磁盘缓存的最大数据量,分为PC和mobile。
|
||||
memoryCacheLimit: {"pc": 600 * 1024 * 1024, "mobile": 300 * 1024 * 1024}, //内存缓存的最大数据量,分为PC和mobile。
|
||||
announce: "https://p2ptrakcer.bapy.top",
|
||||
wsSignalerAddr: 'wss://cd.swarmcloud.net',
|
||||
},
|
||||
webRTCConfig: {
|
||||
iceServers: [{
|
||||
urls: "stun:stun.l.google.com:19302"
|
||||
}, {
|
||||
urls: "stun:global.stun.twilio.com:3478?transport=udp"
|
||||
}, {
|
||||
urls: "stun:stun.cdnbye.com"
|
||||
}]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
danmaku: {
|
||||
id: m3u8url||'https://vip.ffzyread1.com/20230601/13234_55ed2d56/index.m3u8',
|
||||
api: 'https://danmu.aip520.cn/v3/?id='
|
||||
}
|
||||
});
|
||||
|
||||
player.on('stats', function (stats) {
|
||||
_totalP2PDownloaded = stats.totalP2PDownloaded;
|
||||
_totalP2PUploaded = stats.totalP2PUploaded;
|
||||
updateStats();
|
||||
})
|
||||
player.on('peerId', function (peerId) {
|
||||
_peerId = peerId;
|
||||
})
|
||||
player.on('peers', function (peers) {
|
||||
_peerNum = peers.length;
|
||||
updateStats();
|
||||
});
|
||||
//全屏
|
||||
player.on("fullscreen", function() {
|
||||
$("#time").show();
|
||||
});
|
||||
//退出全屏
|
||||
player.on("fullscreen_cancel", function() {
|
||||
$("#time").hide();
|
||||
});
|
||||
|
||||
//移动浏览器video兼容
|
||||
$('body').find('video')
|
||||
.attr('playsinline', '')
|
||||
.attr('x5-playsinline', '')
|
||||
.attr('webkit-playsinline', '')
|
||||
.attr('x-webkit-airplay', 'allow')
|
||||
|
||||
function updateStats() {
|
||||
var text = 'P2P开启 加速' + (_totalP2PDownloaded/1024).toFixed(2)
|
||||
+ 'MB 分享' + (_totalP2PUploaded/1024).toFixed(2) + 'MB' + ' 连接节点' + _peerNum + '个';
|
||||
document.getElementById('stats').innerText = text
|
||||
}
|
||||
//时间更新
|
||||
function timeUpdate() {
|
||||
var date = new Date();
|
||||
var year = date.getFullYear();
|
||||
var month = date.getMonth() + 1;
|
||||
var day = date.getDate();
|
||||
var hour = "00" + date.getHours();
|
||||
hour = hour.substr(hour.length - 2);
|
||||
var minute = "00" + date.getMinutes();
|
||||
minute = minute.substr(minute.length - 2);
|
||||
var second = "00" + date.getSeconds();
|
||||
second = second.substr(second.length - 2);
|
||||
$("#time").html(hour + ":" + minute + ":" + second);
|
||||
setTimeout("timeUpdate()", 1000);
|
||||
}
|
||||
//信息控件
|
||||
if (!$('#time').length) {$("#video").append("<div id='time'></div>");}
|
||||
|
||||
//显示时间
|
||||
timeUpdate();
|
||||
</script>
|
||||
Loading…
x
Reference in New Issue
Block a user