Browse Source

修复摄像头卡死的问题

develop
lau572 3 weeks ago
parent
commit
2cfea5525e
  1. 30
      ruoyi-ui/src/views/JiHeExpressway/components/VideoMulti/videoStream.js

30
ruoyi-ui/src/views/JiHeExpressway/components/VideoMulti/videoStream.js

@ -60,7 +60,9 @@ export async function openVideoStream(container, { camId, url } = {}) {
player.load(); player.load();
player.play(); player.play();
player.on(flvJs.Events.ERROR, (e) => {}); player.on(flvJs.Events.ERROR, (errorType, errorDetails, errorInfo) => {
console.error('video errorInfo', errorInfo);
});
return player; return player;
} }
@ -98,6 +100,8 @@ export class HttpLivePlayer {
// 解码 帧 // 解码 帧
lastDecodedFrames; lastDecodedFrames;
retryCount = 0;
maxRetries = 3; // 最大重试次数
constructor(container, options) { constructor(container, options) {
this.container = container; this.container = container;
@ -106,6 +110,9 @@ export class HttpLivePlayer {
getUrl(options).then((url) => { getUrl(options).then((url) => {
this.url = url; this.url = url;
this.initLiveVideo(); this.initLiveVideo();
}).catch(error => {
console.error('获取URL失败:', error);
Message.error('无法获取视频流URL');
}); });
} }
@ -118,11 +125,18 @@ export class HttpLivePlayer {
this.player.destroy(); this.player.destroy();
this.player = null; this.player = null;
} }
clearMediaElementErrors() {
if (this.container.error) {
console.error('Media element is in an error state:', this.container.error);
this.container.error = null; // 清除错误状态
}
}
initLiveVideo() { initLiveVideo() {
this.destroy(); this.destroy();
this.clearMediaElementErrors(); // 清除媒体元素的错误状态
this.player = null; this.player = null;
this.lastDecodedFrames = null; this.lastDecodedFrames = null;
this.retryCount = 0;
if (!this.url) return; if (!this.url) return;
@ -170,10 +184,13 @@ export class HttpLivePlayer {
// Message.warning( // Message.warning(
// `视频流加载失败, ${ErrorTypesCn[errorType] || "其他错误"}` // `视频流加载失败, ${ErrorTypesCn[errorType] || "其他错误"}`
// ); // );
let self = this; if (this.retryCount < this.maxRetries) {
setTimeout(() => { this.retryCount++;
self.initLiveVideo(); this.initLiveVideo();
}, 300000); } else {
Message.error(`视频流加载失败,已达到最大重试次数。${ErrorTypesCn[errorType] || "其他错误"}`);
this.destroy();
}
}); });
// 视频断流 // 视频断流
@ -182,6 +199,7 @@ export class HttpLivePlayer {
this.lastDecodedFrames = res.decodedFrames; this.lastDecodedFrames = res.decodedFrames;
} else { } else {
this.lastDecodedFrames = 0; this.lastDecodedFrames = 0;
this.initLiveVideo(); // 重置解码帧计数器,防止假死
// this.destroy(); // this.destroy();
// this.initLiveVideo(); // this.initLiveVideo();
} }

Loading…
Cancel
Save