在线flv流截取帧画面转化为图片

当前遇到个需求为在线flv流需要截取帧画面为图片,然后就封装了一个方法,支持在线flv流或者mp4格式截取帧画面转化为base64的图片格式。

用到的库为flv.js

// utils.ts文件
// 截取在线flv视频流为图片
// 封装方法
import flvjs from "flv.js";
export async function captureFramesFromFlv(url: string) {
  return new Promise((resolve, reject) => {
    const videoElement = document.createElement("video");
    videoElement.muted = true; // 静音
    videoElement.autoplay = true; // 自动播放
    const canvasElement = document.createElement("canvas");
    const ctx = canvasElement.getContext("2d");

    // 创建 FLV 播放器
    if (flvjs.isSupported()) {
      const flvPlayer = flvjs.createPlayer({
        // type: "flv",
        // url: url,
        type: "mp4",
        url: url,
      });
      flvPlayer.attachMediaElement(videoElement);
      flvPlayer.load();
      flvPlayer.play();
    } else {
      console.error("不支持 FLV 播放");
      reject("不支持 FLV 播放");
    }

    // 监听视频数据加载事件
    videoElement.addEventListener("loadeddata", function () {
      console.log("视频开始播放");
      // 设置 canvas 尺寸与视频尺寸一致
      canvasElement.width = videoElement.videoWidth;
      canvasElement.height = videoElement.videoHeight;

      // 开始循环截取帧
      // 绘制当前帧到 canvas
      if (ctx) {
        ctx.drawImage(
          videoElement,
          0,
          0,
          canvasElement.width,
          canvasElement.height
        );
      }

      // 转换为图片数据并保存到 frames 数组
      const imageDataUrl = canvasElement.toDataURL();
      console.log("imageDataUrl", imageDataUrl);
      videoElement.pause(); // 停止视频播放
      // 监听视频播放结束事件,在结束时返回截取的帧
      videoElement.addEventListener("ended", () => {
        resolve(imageDataUrl);
      });
    });

    // 加载视频元素和画布元素
    document.body.appendChild(videoElement);
    document.body.appendChild(canvasElement);
    videoElement.style.display = "none";
    canvasElement.style.display = "none";
  });
}

使用为

// 使用组件
import { captureFramesFromFlv } from "@/utils/utils";

// 调用封装的方法
  captureFramesFromFlv("video/test1.mp4")
    .then((imageDataUrl) => {
      console.log(imageDataUrl); // 打印截取的帧数据
    })
    .catch((error) => {
      console.error(error);
    });

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值