当前位置: 首页 > news >正文

JS获取页面中video标签视频的封面和时长

从HTML中提取Video信息

/***  从html字符串中提取video标签*  入参: {String} htmlString*  出参:{Array} 数组*/
function extractVideosFromHTML(htmlString) {const dom = new DOMParser().parseFromString(htmlString, 'text/html');const videos = Array.from(dom.querySelectorAll('video'));return videos.map(videoElement => videoElement.getAttribute('src'));
}

获取视频的第一帧作为视频封面

/*** 获取视频的第一帧* 入参:视频文件的url地址* 返回第一帧图片 */
function getFirstVideoFrame(videoUrl) {return new Promise((resolve, reject) => {const videoElement = document.createElement('video');videoElement.crossOrigin = 'anonymous';videoElement.muted = true; // 可选,静音视频防止音频自动播放问题videoElement.style.display = 'none'; // 隐藏视频元素document.body.appendChild(videoElement); // 添加到DOM中以便加载videoElement.addEventListener('loadedmetadata', () => {// 设置canvas大小与视频一致const canvas = document.createElement('canvas');canvas.width = videoElement.videoWidth;canvas.height = videoElement.videoHeight;const ctx = canvas.getContext('2d');videoElement.addEventListener('seeked', async () => {// 移动到视频开始位置并绘制第一帧ctx.drawImage(videoElement, 0, 0, canvas.width, canvas.height);// 转换canvas内容为Data URLconst imageData = canvas.toDataURL('image/jpeg'); // 或'image/png'// 清理DOMdocument.body.removeChild(videoElement);resolve(imageData)});}, { once: true });// 快速跳转至视频开始处videoElement.currentTime = 0;});videoElement.onerror = (error) => {reject(error); // 如果加载视频出错,返回Promise的reject值};videoElement.src = videoUrl;});
}

获取视频的播放时长

/***  获取视频的时长*  入参:视频文件,file对象*  返回: 视频时长,单位为 秒*/
function getVideoDuration(file) {return new Promise((resolve, reject) => {        const fileReader = new FileReader();fileReader.onload = (event) => {const blob = new Blob([event.target.result], {type: file.type});const video = document.createElement('video');video.src = URL.createObjectURL(blob);video.onloadedmetadata = () => {resolve(video.duration);URL.revokeObjectURL(video.src);video.remove();};video.onerror = (err) => {URL.revokeObjectURL(video.src);video.remove()reject(err)}};fileReader.readAsArrayBuffer(file);});
}
http://www.lryc.cn/news/434719.html

相关文章:

  • LLM大模型学习:AI Agent综述
  • 极米科技:走出舒适圈,推动数据架构现代化升级 | OceanBase 《DB大咖说》
  • IP学习——Fiveday
  • 格式化的硬盘能恢复数据吗?拯救数据的可能性
  • 亚信安全出席第五届国际反病毒大会 探究AI现代网络勒索治理
  • C语言从头学58——学习头文件math.h(一)
  • 前端JS常见面试题
  • 利用深度学习实现验证码识别-4-ResNet18+imagecaptcha
  • IDC基础学习笔记
  • Mysql基础练习题 1527.患某种疾病的患者 (力扣)
  • Mysql链接异常 | [08001] Public Key Retrieval is not allowed
  • vue3项目中如何动态循环设置ref并获取使用
  • stm32之SPI通信协议
  • Unity 摄像机(Camera)详解
  • 数学基础 -- 线性代数之LU分解
  • 高职人工智能训练师边缘计算实训室解决方案
  • 【Java】SpringCloud中使用set方法报错空指针
  • 芯片杂谈 -- 常聊的内核包含哪些模块
  • 运维问题0002:SAP多模块问题-SAP系统程序在执行时,跳出“加急快件”窗口,提示:快件文档“更新已终止”从作者***收到
  • 深度解析RAG:你必须要了解的RAG优化方法
  • 深度学习驱动下的字符识别:挑战与创新
  • 使用 JAXB 将内嵌的JAVA对象转换为 xml文件
  • 若依项目后台启动报错: [网关异常处理]、503
  • 【C++ Qt day10】
  • GO HTTP库使用
  • 数据结构 - 顺序表
  • 企业如何组建安全稳定的跨国通信网络?
  • OCR在线识别网站现已上线!
  • 排名再升2位 中国平安位列BrandZ最具价值中国品牌第9位
  • k8s集群部署:环境准备