html5支持h265播放器,index.html

h265 web player

.mainContainer {

display: block;

width: 1024px;

margin-left: auto;

margin-right: auto;

}

.urlInput {

/* display: block; */

/* width: 100%; */

width:920px;

margin-left: auto;

margin-right: auto;

margin-top: 8px;

margin-bottom: 8px;

}

.centeredAudio, .centeredVideo {

display: block;

width: 100%;

/* height: auto; */

margin-left: auto;

margin-right: auto;

margin-bottom: auto;

/* display: none; */

}

.controls {

display: block;

width: 100%;

text-align: left;

margin-left: auto;

margin-right: auto;

margin-top: 8px;

margin-bottom: 10px;

}

.logcatBox {

border-color: #CCCCCC;

font-size: 11px;

font-family: Menlo, Consolas, monospace;

display: block;

width: 100%;

text-align: left;

margin-left: auto;

margin-right: auto;

}

.options{

margin-bottom : 6px;

font-size : 13px;

}

Your browser is too old which doesn't support HTML5 canvas

Your browser is too old which doesn't support HTML5 audio.

Load

Start

Pause

Destroy

SeekTo

var player, logcatbox = document.getElementsByName('logcatbox')[0],flvLoad = false,paused = false;

var audioElement = document.getElementsByName('audioElement')[0];

var urlInput = document.getElementsByName('265urlinput')[0];

var canvas = document.getElementById('videoDisplayCanvas');

var videoElement = document.getElementsByName('videoElement')[0];

function flv_load() {

if (typeof player !== "undefined") {

if (player != null) {

player.destroy();

player = null;

}

}

player = h265js.createPlayer({

isLive: false

},

{

maxLength4ToBeDecodeQueue: 7 + 30 * 30, //待解码NALU队列最大长度 (fps * s) 7 + 30 * 30

maxLength4ToBeRenderQueue: 200, //待渲染frame队列最大长度 (720p每帧2M,1080p每帧3M) 200

enableYUVrender: true,

enableSkipFrame: false,

disableStreamLoader: false,

lazyLoadMaxDuration: 3 * 60,

seekType: 'range',

wasmFilePath: 'https://github.com/ksvc/h265webplayer/libqydecoder.wasm',

url: urlInput.value,

timeToDecideWaiting: 500, //暂停多久算卡顿, 默认500ms

decodingCapacityInadequateDuration: 10, //解码能力不足持续的时间,默认10s

threshold4decodingCamacityIndequte: 0.8, //实际fps统计值/码流fps < threshold4decodingCamacityIndequte, 持续decodingCapacityInadequateDuration秒,则判定为解码能力不足

bufferTime: 500, //启播前缓冲视频时长(ms)

token: '30ed827e0ccbdbf5642a3f0f8f092f12'

},{

audioElement: audioElement,

canvas: canvas,

videoElement: videoElement

});

if (player) {

player.on(h265js.Events.READY, function(event, data){

// console.warn('ready: ', event, data);

flvLoad = true;

paused = false;

player.load();

//safari浏览器audio标签需要主动触发才可播放

// if (browser_detect('safari')) {

// player.play();

// }

// for (event in h265js.Events) {

// player.on(h265js.Events[event], function(e, data) {

// console.log(data);

// if (h265js.Events[event] == h265js.Events.ERROR && data) {

// console.log(data.type, data.detail, data.info);

// }

// });

// }

});

// player.on(h265js.Events.LOADSTART, function(event, data){

// console.log('loadStart: ', event, data);

// });

player.on(h265js.Events.MEDIAINFO, function(event, data){

console.warn('mediaInfo: ', event, data);

});

// player.on(h265js.Events.VOLUMECHANGE, function(event, data){

// console.log('volumechange: ', event, data);

// });

player.on(h265js.Events.ERROR, function(event, data){

console.warn('error: ', event, data.type, data.detail, data.info, data.info.code, data.info.msg);

});

// player.on(h265js.Events.WARNING, function(event, data){

// console.warn('warning: ', event, data);

// });

// player.on(h265js.Events.STATISTICSINFO, function(event, data){

// console.log('statisticsInfo: ', event, data);

// });

player.on(h265js.Events.WAITING, function(event, data){

console.warn('waiting: ', event, data);

});

player.on(h265js.Events.PLAYING, function(event, data){

console.warn('playing: ', event, data);

});

// player.on(h265js.Events.LOADEDEND, function(event, data){

// console.log('loadedEnd: ', event, data);

// });

// player.on(h265js.Events.PLAY, function(event, data){

// console.log('play: ', event, data);

// });

// player.on(h265js.Events.PAUSE, function(event, data){

// console.log('pause: ', event, data);

// });

player.on(h265js.Events.RELOAD, function(event, data){

console.warn('reload: ', event, data);

});

}

}

function flv_start() {

if (player) {

player.play();

}

}

function flv_pause() {

if (player) {

player.pause();

paused = true;

}

}

function flv_destroy() {

if (player) {

setTimeout(function() {

player.destroy();

player = null;

}, 500);

}

flvLoad = false;

}

function flv_seekto() {

var input = document.getElementsByName('seekpoint')[0];

player.currentTime = parseFloat(input.value);

}

function getUrlParam(key, defaultValue) {

var pageUrl = window.location.search.substring(1);

var pairs = pageUrl.split('&');

for (var i = 0; i < pairs.length; i++) {

var keyAndValue = pairs[i].split('=');

if (keyAndValue[0] === key) {

return keyAndValue[1];

}

}

return defaultValue;

}

function browser_detect(name) {

// Opera 8.0+

var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;

// Firefox 1.0+

var isFirefox = typeof InstallTrigger !== 'undefined';

// Safari 3.0+ "[object HTMLElementConstructor]"

var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification);

// Internet Explorer 6-11

var isIE = /*@cc_on!@*/false || !!document.documentMode;

// Edge 20+

var isEdge = !isIE && !!window.StyleMedia;

// Chrome 1+

var isChrome = !!window.chrome && !!window.chrome.webstore;

// Blink engine detection

var isBlink = (isChrome || isOpera) && !!window.CSS;

switch (name) {

case 'safari':

return isSafari;

case 'chrome':

return isChrome;

case 'opera':

return isOpera;

case 'firefox':

return isFirefox;

default:

return '请输入要检测的浏览器名称';

}

}

h265js.LoggingControl.addLogListener(function(type, str) {

logcatbox.value = logcatbox.value + str + '\n';

logcatbox.scrollTop = logcatbox.scrollHeight;

});

document.addEventListener('DOMContentLoaded', function () {

// flv_load();

});

// 各种浏览器兼容

var state, visibilityChange;

if (typeof document.hidden !== "undefined") { //normal

visibilityChange = "visibilitychange";

state = "visibilityState";

} else if (typeof document.mozHidden !== "undefined") { //moz

visibilityChange = "mozvisibilitychange";

state = "mozVisibilityState";

} else if (typeof document.msHidden !== "undefined") { //ms

visibilityChange = "msvisibilitychange";

state = "msVisibilityState";

} else if (typeof document.webkitHidden !== "undefined") { //webkit

visibilityChange = "webkitvisibilitychange";

state = "webkitVisibilityState";

}

document.addEventListener(visibilityChange, function() {

if (!browser_detect('opera')) {

if (document[state] === "visible") {

if (flvLoad) {

flv_load();

}

} else {

if (flvLoad) {

flv_destroy();

flvLoad = true;

}

}

}

});

// window.onload = function() {

// this.flv_load();

// }

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值