Commit 0da779c8 by 陈岩

pref: 优化视频页面

1 parent e42e6d39
Showing 60 changed files with 77 additions and 49 deletions
...@@ -7,9 +7,8 @@ ...@@ -7,9 +7,8 @@
content="width=device-width,viewport-fit=cover,initial-scale=1.0,maximum-scale=1.0, user-scalable=no" content="width=device-width,viewport-fit=cover,initial-scale=1.0,maximum-scale=1.0, user-scalable=no"
/> />
<title>视频巡店</title> <title>视频巡店</title>
<script src="/jessibuca-pro/jessibuca-pro-demo.js"></script> <script src="/JessibucaPro/jessibuca-pro-demo.js"></script>
<script src="/jessibuca-pro/jessibuca-pro-talk-demo.js"></script> <script src="/static/uni.webview.1.5.5.js"></script>
<script src="/jessibuca-pro/uni.webview.1.5.5.js"></script>
</head> </head>
<body> <body>
<div id="app" class="fullPage"></div> <div id="app" class="fullPage"></div>
......
This diff could not be displayed because it is too large.
No preview for this file type
"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;(e.data.urlOrBlob?import(e.data.urlOrBlob):import("./decoder-pro-f-simd-mt-worker.js")).then(exports=>exports.default(Module))}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){Module["__embind_initialize_bindings"]();initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err(`worker.js received unknown command ${e.data.cmd}`);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
No preview for this file type
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;(e.data.urlOrBlob?import(e.data.urlOrBlob):import("./decoder-pro-mt-worker.js")).then(exports=>exports.default(Module))}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){Module["__embind_initialize_bindings"]();initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err(`worker.js received unknown command ${e.data.cmd}`);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;(e.data.urlOrBlob?import(e.data.urlOrBlob):import("./decoder-pro-simd-mt-worker.js")).then(exports=>exports.default(Module))}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){Module["__embind_initialize_bindings"]();initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err(`worker.js received unknown command ${e.data.cmd}`);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
No preview for this file type
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
...@@ -15,7 +15,8 @@ const extendOperateBtns = []; ...@@ -15,7 +15,8 @@ const extendOperateBtns = [];
export function getPlayerConfig () { export function getPlayerConfig () {
return { return {
decoder: './jessibuca-pro/decoder-pro.js', decoder: `${import.meta.env && import.meta.env.PROD ? '/apph5/' : '/'}JessibucaPro/decoder-pro.js`,
text: '', // TODO: 功能暂不清楚 text: '', // TODO: 功能暂不清楚
keepScreenOn: true, // 屏幕常亮 keepScreenOn: true, // 屏幕常亮
isResize: false, isResize: false,
......
...@@ -45,6 +45,7 @@ export default { ...@@ -45,6 +45,7 @@ export default {
return { return {
// eslint-disable-next-line // eslint-disable-next-line
_jessibuca: null, _jessibuca: null,
nowPlayUrl:'',
playOriginUrl: '', playOriginUrl: '',
rotateNum: 0, rotateNum: 0,
mirrorIndex: 0, mirrorIndex: 0,
...@@ -76,10 +77,23 @@ export default { ...@@ -76,10 +77,23 @@ export default {
init(url, params = {}) { init(url, params = {}) {
const options = merge(getPlayerConfig(), { const options = merge(getPlayerConfig(), {
container: this.$refs.container, container: this.$refs.container,
useWebFullScreen: this.isXCXPage, controlAutoHide: true,
fullscreenWatermarkConfig: { debug: true,
text: this.watermarkText || '', decoderErrorAutoWasm: false,
}, demuxUseWorker: true,
hasAudio: true,
isFlv: false,
isMulti: true,
useWebFullScreen:true,
loadingText: '加载中...',
useMSE: true,
useMThreading: true,
useWCS: false,
videoBuffer: 0.2,
videoBufferDelay: 2,
heartTimeout: 10,
heartTimeoutReplay: true,
heartTimeoutReplayTimes: 2,
operateBtns: { operateBtns: {
play: true, play: true,
audio: true, audio: true,
...@@ -104,53 +118,65 @@ export default { ...@@ -104,53 +118,65 @@ export default {
} }
}, },
registerEvent(playerIns) { registerEvent(playerIns) {
const _this = this const _this = this;
playerIns.on(JessibucaPro.EVENTS.videoInfo, (data) => { playerIns.on(JessibucaPro.EVENTS.videoInfo, data => {
console.log('width:', data.width, 'height:', data.height); // console.log('width:', data.width, 'height:', data.height);
this.player.width = data.width; _this.player.width = data.width;
this.player.height = data.height; _this.player.height = data.height;
}); });
// 监听全屏时旋转(仅在微信小程序或钉钉H5环境执行)
// 监听全屏时旋转
playerIns.on(JessibucaPro.EVENTS.fullscreen, (data) => { playerIns.on(JessibucaPro.EVENTS.fullscreen, (data) => {
const dom = document.querySelector('.vion-player.jessibuca-container.jessibuca-controls-show') const isEmbedded = this.isXCXPage || /MicroMessenger|DingTalk/i.test(navigator.userAgent);
dom.style.transform = data? 'rotate(180deg)' : 'rotate(0deg)'; if (isEmbedded) {
if (data) {
playerIns.setRotate(90);
} else {
playerIns.setRotate(0);
}
}
}); });
playerIns.on("play", flag => {
playerIns.on('play', () => { // console.log('on-play', flag);
console.log('on-play-success'); // _this.$emit("video-play");
this.$emit('play-success'); _this.$emit('play-success');
// this.playing = true;
}); });
/* playerIns.on('pause', (flag) => { playerIns.on("pause", flag => {
console.log('on-pause', flag); // console.log('on-pause', flag);
this.playing = false; _this.$emit("video-pause");
}); */ });
// 新增:监听解码方式实际生效的日志
// playerIns.on('decodeTypeChange', (type) => {
// console.log('当前实际解码方式11:', type); // 输出 hardware/software,用于调试
// });
// 断线重连 // 断线重连
playerIns.on(JessibucaPro.EVENTS.playFailedAndPaused, (e) => { playerIns.on(JessibucaPro.EVENTS.playFailedAndPaused, e => {
console.log('playFailedAndPaused', e); console.log("playFailedAndPaused", e);
this.replay(); _this.play(_this.nowPlayUrl, _this.isPlayback);
}); });
playerIns.on(JessibucaPro.EVENTS.ptz, arrow => {
playerIns.on(JessibucaPro.EVENTS.ptz, (arrow) => {
// console.log('ptz', arrow); // console.log('ptz', arrow);
this.$emit('ptz-control', arrow); _this.$emit("ptz-control", arrow);
}); });
// 改变倍速事件 // 改变倍速事件
playerIns.on('playbackPreRateChange', (rate) => { playerIns.on("playbackPreRateChange", rate => {
// console.log('playbackPreRateChange', rate); // console.log('playbackPreRateChange', rate);
this.$emit('rate-change', rate, this.setForward); _this.$emit("rate-change", rate, _this.setForward);
}); });
// 点击时间轴跳转事件 // 点击时间轴跳转事件
playerIns.on('playbackSeek', (data) => { playerIns.on("playbackSeek", data => {
console.log('playbackSeek', data); // console.log('playbackSeek', data);
// jessibuca.setPlaybackStartTime(data.ts); // jessibuca.setPlaybackStartTime(data.ts);
}); });
playerIns.on("error", function(error) {
if(error !== 'mediaSourceAudioG711NotSupport'){
_this.$emit("paly-error", error);
}
});
// 电子放大 // 电子放大
this.$refs.container.addEventListener('wheel', throttle(this.handleWheel, 200)); _this.$refs.container.addEventListener(
"wheel",
throttle(_this.handleWheel, 200)
);
}, },
setForward(rate) { setForward(rate) {
this._jessibuca.forward(rate); this._jessibuca.forward(rate);
...@@ -194,6 +220,7 @@ export default { ...@@ -194,6 +220,7 @@ export default {
// 暴露方法 // 暴露方法
play(url, isPlayback = false) { play(url, isPlayback = false) {
if (url) { if (url) {
this.nowPlayUrl = url;
const playbackStatus = this.getPlaybackStatus(isPlayback); const playbackStatus = this.getPlaybackStatus(isPlayback);
// 播放地址不同,则先停止再播放。地址相同,相当于暂停后,继续播放 // 播放地址不同,则先停止再播放。地址相同,相当于暂停后,继续播放
// 若是回放,则直接播放 // 若是回放,则直接播放
...@@ -230,20 +257,18 @@ export default { ...@@ -230,20 +257,18 @@ export default {
} }
}, },
rotate(num) { rotate(num) {
let targetRotate = 0;
if (Number.isInteger(num)) { if (Number.isInteger(num)) {
targetRotate = num; const step = ((Math.round(num / 90) % 4) + 4) % 4;
this.rotateNum = step;
} else { } else {
this.rotateNum++; this.rotateNum = (this.rotateNum + 1) % 4;
targetRotate = (this.rotateNum % 4) * 90;
} }
this._jessibuca.setRotate(targetRotate); this._jessibuca.setRotate(this.rotateNum * 90);
}, },
mirrorRotate() { mirrorRotate() {
// , 'vertical' const typeList = ['none', 'level', 'vertical'];
const typeList = ['', 'level']; this.mirrorIndex = (this.mirrorIndex + 1) % typeList.length;
this.mirrorIndex++; const targetType = typeList[this.mirrorIndex];
const targetType = typeList[this.mirrorIndex % 2];
this._jessibuca.setMirrorRotate(targetType); this._jessibuca.setMirrorRotate(targetType);
}, },
screenshot(filename = '', format = 'jpeg', quality = 1, type = 'base64') { screenshot(filename = '', format = 'jpeg', quality = 1, type = 'base64') {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!