小元
博客
详情文字在这里缓缓展开
静候你翻开这一页

优化播放“MJPEG”时出现的白屏现象

你是否遇到过此类事呢?MJPEG只能被img标签播放,播放久了后甚至会出现画面白屏情况,如果你也遇到了和我一样的情况,不妨进来看看我的解决方法。

“MJPEG”解决方案


   前言:

       该方法也许算不上好,但能解决目前博主遇见的问题,经实测运行一夜后画面仍然能正常播放,未出现卡顿,画面白屏等异常情况,如果你也没有其它方案,不妨参考一下。


   解决方法:

       使用canvas进行绘制。


   原代码:

<template>
  <div class="video">
    <canvas ref="leftRef"></canvas>
    <canvas ref="rightRef"></canvas>
  </div>
</template>

<script setup lang="ts">
import {onBeforeUnmount, onMounted, ref} from "vue";


const leftRef = ref<HTMLCanvasElement | null>(null);
const rightRef = ref<HTMLCanvasElement | null>(null);

class drawImg {
  ctx: CanvasRenderingContext2D | null;
  target: HTMLCanvasElement;
  img: HTMLImageElement;
  url: string;

  constructor(target: HTMLCanvasElement, url: string) {
    this.target = target;
    this.url = url;

    this.init();
  }

  init() {
    this.ctx = this.target.getContext("2d");

    this.img = new Image();
    this.img.onload = () => {
      this.target.width = this.img.width;
      this.target.height = this.img.height;

      this.ctx && this.ctx.drawImage(this.img, 0, 0);
      this.updateImg();
    };

    this.img.src = this.url;
  }
  
  // 每隔100毫秒更新一次
  updateImg() {
    setTimeout(() => {
      this.ctx && this.ctx.drawImage(this.img, 0, 0);
      this.updateImg();
    }, 100);
  }
}

onMounted(() => {
  // 传入canvas节点,和播放链接
  rightRef.value && new drawImg(rightRef.value, url);
});
</script>


渝ICP备2024031078号-1
本网站一切内容不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
如无意中侵犯了企业或个人的知识产权等,请及时通过电子邮件(1102905617@qq.com)告知我,本网站将会给予删除。
最新公告
😊访客你好,很高兴你的到来,本博客仍在建设中,还有些许功能尚在开发中,最后祝你在此能有所收获。
💥小元博客第三代自2025年9月上线以来,2026/08/09日迎来了它的第三次更新本次更新内容如下:
1. 文章详情页样式变更,由原来的弹窗改为单独的页面。
2. 使用Nuxt对项目进行了SEO优化,优化了搜索引擎的抓取和索引。
3. 对验签进行了优化,降低了请求被误触发拦截的概率。
4. 移动端也正在稳步推进中,在不久的将来会与大家见面。
5. 修复了首页黄历节日不显示的问题,以及其它bug的修复。