linkpi_firmware_history/rootfs/link/web/player.php

240 lines
8.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
$needLogin=false;
include( "head.php" );
?>
<style>
.video-cloud {
position: absolute;
width: 100%;
/*height: 100%;*/
height: 99.2%;
background: black;
z-index: 999;
font-size: 60px;
color: white;
transition: .3s color, .3s border;
display:flex;
align-items:center;
justify-content: center;
}
.loading {
display: inline-block;
width: 1.3em;
height: 1.3em;
color: inherit;
vertical-align: middle;
pointer-events: none;
border-top: .2em solid currentcolor;
border-right: .2em solid transparent;
-webkit-animation: loading 1s linear infinite;
animation: loading 1s linear infinite;
border-radius: 100%;
position: relative;
background: black;
}
@-webkit-keyframes loading {
to {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes loading {
to {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
</style>
<div id="alert"></div>
<div class="row">
<div class="col-md-12">
<div class="panel panel-default">
<div class="title">
<form class="form-inline ">
<div class="form-group ">
<label class="control-label">
<cn>频道</cn>
<en>Channel</en>:
</label>
<select id="channels" class="form-control"></select>
</div>
<div id="bufferBox" class="form-group" style="margin-left: 10px;">
<label class="control-label">
<cn>缓冲</cn>
<en>Buffer</en>:
</label>
<div class="input-group">
<input id="buffer" type="text" class="form-control" value="500" style="width: 60px">
<div class="input-group-addon">ms</div>
</div>
</div>
<div id="warning" style="position: absolute;top: 20px;right: 40px;color: var(--btn_background);font-size: 20px;cursor: pointer">
<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>
</div>
</form>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-12">
<div style="width:100%; padding-bottom: 56.25%; position: relative;">
<video id="player" controls muted autoplay style="width:100%;height: 100%; position: absolute; background: #555;"></video>
<div id="jess" style="position: absolute;width: 100%;height: 100%;background: #555"></div>
<div class="video-cloud">
<div class="loading"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script language="javascript" src="js/flv.js" ></script>
<script src="js/zcfg.js"></script>
<script src="vendor/switch/bootstrap-switch.js"></script>
<script src="js/jessibuca/jessibuca.js"></script>
<script>
$( function () {
navIndex( 4 );
$.fn.bootstrapSwitch.defaults.size = 'small';
$.fn.bootstrapSwitch.defaults.onColor = 'warning';
var bufferTime = localStorage.getItem("bufferTime");
if(bufferTime == null || bufferTime == "")
bufferTime = 200;
$("#buffer").val(bufferTime);
var ctx = '<div class="row">' +
'<div class="col-sm-12">' +
'<cn>1、使用h5播放器需要开启对应视频通道的rtmp协议</cn>' +
'<en>1. To use H5 player, enable the RTMP protocol for the corresponding video channel</en>' +
'</div>' +
'<div class="col-sm-12">' +
'<cn>2、播放h265编码的视频流对电脑配置要求较高,如果遇到音视频卡顿问题,请更换性能更好的电脑播放</cn>' +
'<en>2. Playing H265 encoded video stream has high requirements for computer configuration. If you encounter audio and video delay problem, please replace the device with better performance</en>' +
'</div>' +
'</div>';
$("#warning").popover({content:ctx, html:true, placement:"left"});
var player=null;
function setChannel(codec,suffix,hasAudio){
$(".video-cloud").show();
if(player!=null)
{
if(player.hasOwnProperty("unload")) {
player.unload();
player.detachMediaElement();
}
player.destroy();
}
if(codec == "h265") {
$("#player").hide();
$("#jess").show();
$("#bufferBox").show();
player = new Jessibuca({
container: document.getElementById('jess'),
videoBuffer: bufferTime/1000,
decoder: "js/jessibuca/decoder.js",
isResize: true,
hasAudio: hasAudio,
operateBtns: {
fullscreen: true,
play: true,
audio: hasAudio,
},
forceNoOffscreen: true,
isNotMute: false,
});
player.play('http://'+window.location.host+'/flv?app=live&stream='+suffix);
player.on("play", function (flag) {
$(".video-cloud").hide();
})
} else {
$("#player").show();
$("#jess").hide();
$("#bufferBox").hide();
player = flvjs.createPlayer({
type: 'flv',
hasAudio: hasAudio,
url: 'http://'+window.location.host+'/flv?app=live&stream='+suffix
});
player.attachMediaElement(document.getElementById("player"));
player.load(); //加载
}
};
$("video")[0].addEventListener("canplay",function () {
$(".video-cloud").hide();
});
$( "#channels" ).change( function () {
var codec = $("#channels option:selected").attr("codec");
var suffix = $("#channels option:selected").attr("suffix");
var hasAudio = $("#channels option:selected").attr("hasAudio");
setChannel(codec, suffix, hasAudio);
} );
function checkDelay() {
if (player != null && player.hasOwnProperty("buffered") && player.buffered.length > 0) {
if (player.buffered.end(0) - player.currentTime > 1.5) {
player.currentTime = player.buffered.end(0) - 0.2
}
}
}
setInterval( checkDelay, 1000 );
var config;
$.getJSON( "config/config.json?rnd=" + Math.random(), function ( result ) {
config = result;
var first=-1;
var codec=-1;
var sufx = -1;
var hasAudio=false;
for ( var i = 0; i < config.length; i++ ) {
if ( !config[ i ].enable || !config[i].stream.rtmp )
continue;
var suffix = "stream"+config[i].id;
if(config[i].stream.hasOwnProperty("suffix"))
suffix = config[i].stream.suffix;
if(first==-1) {
first=config[ i ].id;
codec=config[ i ].encv.codec;
sufx = suffix;
if(config[ i ].enca.codec != "close")
hasAudio = true
}
$( "#channels" ).append( '<option value="' + config[ i ].id + '" codec="'+config[i].encv.codec+'"hasAudio="'+hasAudio+'" suffix="'+suffix+'" >' + config[ i ].name + '</option>' );
}
setChannel(codec, sufx, hasAudio);
} );
$("#warning").hover(function () {
if($(".popover").length > 0)
$(this).popover("hide");
else
$(this).popover("show");
})
$("#buffer").blur(function (){
var buffer = $("#buffer").val();
bufferTime = buffer;
localStorage.setItem("bufferTime",buffer);
var id = $( "#channels" ).val();
var codec = $("#channels option:selected").attr("codec");
var suffix = $("#channels option:selected").attr("suffix");
var hasAudio = $("#channels option:selected").attr("hasAudio");
setChannel(codec,suffix,hasAudio);
});
} );
</script>
<?php
include( "foot.php" );
?>