首页 > 其他分享 >canvas实现视频播放并支持自动播放

canvas实现视频播放并支持自动播放

时间:2023-08-02 22:01:51浏览次数:24  
标签:canvas const videoEl video 自动播放 播放

背景:

在工作中很多时候会遇到大屏首页需要酷炫的动态背景,很多时候酷炫的动效用css和js比较难于实现。此时就会产生两种方案,第一种是采用gif,第二种会采用video方案。

但是第一种方案有时候导出的 gif 图片往往会比较大,在首屏加载有时候会不太理想,资源比较大在加载时会出现一卡一卡的现象,体验不太友好。此时就衍生除了第二种方案视频播放方案,但是如果直接使用video标签去播放会出现浏览器的一些兼容性问题和样式不统一问题,还有就是层级有时候会在最顶端遮盖了其他元素,导致不好的效果,这时就要采用canvas去播放视频来解决这些问题了。

选择方案:

video + canvas

简单示例:

代码实现:

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=`, initial-scale=1.0">
    <title>canvas实现视频播放并支持自动播放</title>
</head>
<body>
  <canvas id="canvas" width="640px" height="360px"></canvas>

  <script src="./index.js"></script>  
</body>
</html>

index.js

window.onload = () => {
  // 创建一个虚拟video元素
  const videoEl = document.createElement("video");
  videoEl.src = "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4";
  // 重要:由于浏览器限制自动播放问题,则需要使用无声播放即可实现自动播放
  videoEl.muted = "muted"; 
  videoEl.autoplay = "autoplay";
  videoEl.loop = "loop";
  videoEl.play();

  // 创建canvas
  const canvas = document.getElementById("canvas");
  const cvsWidth = canvas.width;
  const cvsHeight = canvas.height;
  const ctx = canvas.getContext("2d");
  
  // 使用requestAnimationFrame定时器实现canvas绘制video每一帧
  const videoRender = () => {
    window.requestAnimationFrame(videoRender);
    ctx.drawImage(videoEl, 0, 0, cvsWidth, cvsHeight);
    ctx.clearRect(0, 0, cvsWidth, cvsHeight);
  };
  videoRender();
};

 

标签:canvas,const,videoEl,video,自动播放,播放
From: https://www.cnblogs.com/zion0707/p/17601832.html

相关文章

  • 记录--canvas 复刻锤子时钟
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助介绍canvas:使用脚本(通常为JavaScript)来绘制图形的HTML元素。本人遍历了以下两份文档,学习完就相当于有了笔和纸,至于最后能画出什么,则需要在canvas应用方面进一步学习。MDN的Canvas教程1张鑫旭的Ca......
  • 51单片机 蜂鸣器播放小星星
    普中科技a4#include<REGX52.H>#include<INTRINS.H>typedefunsignedcharu8;typedefunsignedintu16;typedefunsignedlongu32;voiddelay_10us(u16t){while(--t);}//蜂鸣器sbitbuzzer=P2^5;//频率u16music_base_frequency[7]={......
  • Android View绘制原理 - SkCanvas
    上一篇文章介绍了在Android框架中的各种Canvas,其中C层的RecordingCanas承上启下,在SkiaRecordingCanvas的绘制方法会通过调用它的mRecorder来记录,而这个mRecorder的类型正好就是SkCanvas,准确的说是它的子类RecordingCanas。而各种绘制方法会对应生成一个Op对象来描述这个绘制操作,Rec......
  • 如何隐藏开源流媒体EasyPlayer.js视频H.265播放器的实时录像按钮?
    目前我们TSINGSEE青犀视频所有的视频监控平台,集成的都是EasyPlayer.js版播放器,它属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,包括WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC等,支持全平台、全终端播放,如Windows、Linux、Android、iOS,支持H.264与H.265编码......
  • 开源流媒体播放器EasyPlayer.js播放H.265视频,无法截取快照是什么原因?
    TSINGSEE青犀视频的开源流媒体播放器EasyPlayer视频播放器,可支持H.264与H.265视频编码格式,性能稳定、播放流畅,还能支持RTSP、RTMP、HLS、FLV、WebRTC等视频流播放,并且已实现网页端实时录像、在iOS上实现低延时直播等功能。目前TSINGSEE青犀视频的所有视频监控平台均使用的是EasyPl......
  • TSINGSEE青犀视频汇聚平台EasyCVR多种视频流播放协议介绍
    视频监控综合管理平台EasyCVR具备视频融合能力,平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台既具备传统安防视频监控的能力与服务,也支持AI智能检测技术的接入,可应用在多行业领域的智能化监管场景中。EasyDarwin开源流媒体视频EasyCVR安防监控平台可提供视频监控......
  • TSINGSEE青犀视频汇聚平台EasyCVR多种视频流播放协议介绍
    视频监控综合管理平台EasyCVR具备视频融合能力,平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台既具备传统安防视频监控的能力与服务,也支持AI智能检测技术的接入,可应用在多行业领域的智能化监管场景中。EasyDarwin开源流媒体视频EasyCVR安防监控平台可提供视频监......
  • 如何隐藏开源流媒体EasyPlayer.js视频H.265播放器的实时录像按钮?
    目前我们TSINGSEE青犀视频所有的视频监控平台,集成的都是EasyPlayer.js版播放器,它属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,包括WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC等,支持全平台、全终端播放,如Windows、Linux、Android、iOS,支持H.264与H.265编码,......
  • TSINGSEE青犀视频开源流媒体播放器EasyPlayer.js播放H.265视频,无法截取快照是什么原因
    TSINGSEE青犀视频的开源流媒体播放器EasyPlayer视频播放器,可支持H.264与H.265视频编码格式,性能稳定、播放流畅,还能支持RTSP、RTMP、HLS、FLV、WebRTC等视频流播放,并且已实现网页端实时录像、在iOS上实现低延时直播等功能。目前TSINGSEE青犀视频的所有视频监控平台均使用的是EasyPla......
  • 国标GB28181视频平台LntonGBS(源码版)国标视频平台大屏播放时出现数据未推送的问题解决
    LntonGBS平台实现视频直播、转码与分发、平台级联、云台控制等,拥有灵活丰富的视频能力。平台基于云边端一体化架构,在很多场景中均有落地项目应用,如智慧工地、智慧安防、智慧工厂、智慧园区等。近期有用户反馈其定制版LntonGBS平台现场播放24路上大屏时有部分通道存在30秒左右出现未......