设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间13 现在时间13 缓存数据 风骨神仙籍里人,诗狂酒圣且平生。开元一遇成何事,留得千秋万古名。

风骨神仙籍里人,诗狂酒圣且平生。开元一遇成何事,留得千秋万古名。 -- 杨花落尽子规啼

查看: 958|回复: 0

基于Vue3实现视频播放与截图功能

[复制链接]

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
30
主题
28
精华
0
金钱
97
积分
60
注册时间
2023-9-30
最后登录
2025-5-31

发表于 2025-5-31 05:33:35 | 显示全部楼层 |阅读模式
视频播放

使用
  1. HTML5
复制代码
  1. <video>
复制代码
标签实现,
  1. src
复制代码
改成你自己的视频路径。
  1. <video
  2.   ref="videoRef"
  3.   class="video-element"
  4.   src="@/assets/video/1.mp4"
  5.   autoplay
  6.   loop
  7.   muted
  8. ></video>
复制代码
video 标签基本属性

属性说明src视频文件路径(支持相对/绝对路径)autoplay自动播放(部分浏览器需配合muted属性)controls显示默认播放控制条width/height设置视频显示尺寸muted静音播放loop循环播放preload预加载策略(auto/metadata/none)
视频截图功能实现


思路


  • 视频帧捕获:首先,通过
    1. <video>
    复制代码
    元素获取当前播放的视频帧画面,浏览器会将视频解码为连续的图像帧,我们可以通过
    1. <video>
    复制代码
    标签的API访问当前显示的帧。
  • Canvas 绘制转换:创建一个与视频尺寸相同的
    1. Canvas
    复制代码
    画布,使用
    1. Canvas 2D
    复制代码
    上下文(
    1. Context2D
    复制代码
    )的
    1. drawImage()
    复制代码
    方法将视频帧绘制到画布上。
  • Base64 编码输出:调用
    1. Canvas
    复制代码
    1. toDataURL()
    复制代码
    方法,将绘制好的图像数据转换为
    1. Base64
    复制代码
    编码的图片
    1. URL
    复制代码
    。该方法支持指定输出格式(如
    1. PNG/JPEG
    复制代码
    )和质量参数,转换后的数据可以直接用作图片源或下载保存。

代码实现

HTML
  1. <template>
  2.   <div class="video-container">
  3.     <!-- 视频播放器 -->
  4.     <div class="video-wrapper">
  5.       <video
  6.         ref="videoRef"
  7.         class="video-element"
  8.         src="@/assets/video/1.mp4"
  9.         autoplay
  10.         controls
  11.       ></video>
  12.     </div>
  13.   </div>
  14. </template>
复制代码
js
  1. <script setup>
  2. import { ref, onMounted, onBeforeUnmount } from "vue";
  3. import { ElMessage } from "element-plus";

  4. const videoRef = ref(null);
  5. const screenshotUrl = ref(""); // 截图后的图片URL

  6. // 截图功能
  7. const scanImage = () => {
  8.   if (!videoRef.value) return;

  9.   try {
  10.     // 创建canvas元素
  11.     const canvas = document.createElement("canvas");
  12.     const video = videoRef.value;

  13.     // 设置canvas尺寸与视频相同
  14.     canvas.width = video.videoWidth;
  15.     canvas.height = video.videoHeight;

  16.     // 绘制当前视频帧到canvas
  17.     const ctx = canvas.getContext("2d");
  18.     ctx.drawImage(video, 0, 0, canvas.width, canvas.height);

  19.     // 转换为DataURL
  20.     screenshotUrl.value = canvas.toDataURL("image/png");

  21.     ElMessage.success("截图成功!");
  22.   } catch (error) {
  23.     console.error("截图失败:", error);
  24.     ElMessage.error("截图失败: " + error.message);
  25.   }
  26. };

  27. // 快捷键支持 (F9截图)
  28. const handleKeyDown = (e) => {
  29.   if (e.key === "F9") {
  30.     e.preventDefault();
  31.     scanImage();
  32.   }
  33. };

  34. // 添加事件监听
  35. onMounted(() => {
  36.   window.addEventListener("keydown", handleKeyDown);
  37. });

  38. // 移除事件监听
  39. onBeforeUnmount(() => {
  40.   window.removeEventListener("keydown", handleKeyDown);
  41. });
  42. </script>
复制代码
css
  1. <style lang="scss" scoped>
  2. .video-container {
  3.   padding: 20px;
  4.   max-width: 800px;
  5.   margin: 0 auto;
  6. }

  7. .video-wrapper {
  8.   position: relative;
  9.   border-radius: 8px;
  10.   overflow: hidden;
  11.   box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  12.   background: #000;
  13. }

  14. .video-element {
  15.   width: 100%;
  16.   display: block;
  17. }

  18. .screenshot-controls {
  19.   position: absolute;
  20.   bottom: 20px;
  21.   right: 20px;
  22.   z-index: 10;
  23. }

  24. .screenshot-result {
  25.   display: flex;
  26.   justify-content: center;
  27.   align-items: center;
  28.   min-height: 300px;
  29. }

  30. .screenshot-image {
  31.   max-width: 100%;
  32.   border: 1px solid #ebeef5;
  33.   border-radius: 4px;
  34. }

  35. .empty-tip {
  36.   color: #909399;
  37.   font-size: 14px;
  38.   text-align: center;
  39.   padding: 20px;
  40. }
  41. </style>
复制代码
到此这篇关于基于Vue3实现视频播放与截图功能的文章就介绍到这了,更多相关Vue3视频播放与截图内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表