返回顶部
首页 > 资讯 > 前端开发 > JavaScript >浏览器视频帧操作方法 requestVideoFrameCallback()
  • 928
分享到

浏览器视频帧操作方法 requestVideoFrameCallback()

2024-04-02 19:04:59 928人浏览 薄情痞子
摘要

目录前言与 requestAnimationFrame() 的区别浏览器支持使用方法总结前言 近期发现一个很酷的应用场景,对着摄像头做动作,然后分析器动画渲染到 3D 模型上,在了解

前言

近期发现一个很酷的应用场景,对着摄像头做动作,然后分析器动画渲染到 3D 模型上,在了解其实现原理后,对一些技术点做一些学习笔记。 requestVideoFrameCallback() 就是其中的技术点,使用方法可以在浏览器中高效的处理视频。

htmlVideoElement.requestVideoFrameCallback() 是一个新的WEB api,2021 年 1 月 25 日提交的草案。requestVideoFrameCallback() 方法允许web开发者注册一个回调方法,回调方法在新视频帧发送到合成器时在渲染步骤中运行。这是为了让开发人员对视频执行高效的每帧视频操作,例如视频处理和绘制到画布上(截屏)、视频分析或与外部音频源同步。

与 requestAnimationFrame() 的区别

可以通过API执行方法 drawImage() 将视频帧绘制到画布等操作将尽可能的与屏幕上播放的视频的帧速率同步。与通常每秒触发约 60 次的 window.requestAnimationFrame() 不同,requestVideoFrameCallback() 与实际视频帧速率绑定,但也有一个重要的例外:

运行回调的有效速率是视频速率和浏览器速率之间的较小速率。这意味着在以 60Hz 绘制的浏览器中播放的 25fps 视频将以 25Hz 触发回调。在同一个 60Hz 浏览器中的 120fps 视频会以 60Hz 触发回调。

由于它与 window.requestAnimationFrame() 相似,该方法最初被提议为 video.requestAnimationFrame(),最终使用新的名称 requestVideoFrameCallback(),这是在漫长的讨论后达成一致的,这个名称相对来说比较更加直观。

前端开发中,通常在使用一些新的WEB API的时候需要检测其可用性,同样可以使用一下代码进行检测:

if ("requestVideoFrameCallback" in HTMLVideoElement.prototype) {
    // 支持相应的API
}

浏览器支持

可以点击链接查看相应的支持度。

使用方法

如果曾经使用过 requestAnimationFrame() 方法,那么会立即对 requestVideoFrameCallback() 方法并不陌生。注册一次初始回调,然后在回调触发时重新注册。

const videoFrameCallback = (now, metadata) => {
    console.log(now, metadata);
    // 重新注册回调以获得关于下一帧的通知。
    videoElement.requestVideoFrameCallback(videoFrameCallback);
};
// 最初注册回调,以便在第一帧时得到通知。
videoElement.requestVideoFrameCallback(videoFrameCallback);

在回调中,now 是一个 DOMHighResTimeStampmetadata 是一个 VideoFrameMetadata 字典,具有以下属性:

  • presentationTimeDOMHighResTimeStamp 类型,用户代理提交帧以进行合成的时间。
  • expectedDisplayTimeDOMHighResTimeStamp 类型,用户代理期望框架可见的时间。
  • widthunsigned long 类型,视频帧的宽度,以像素为单位。
  • heightunsigned long 类型,视频帧的高度,以像素为单位。
  • mediaTimedouble 类型,媒体呈现时间戳 (PTS),以呈现帧的秒数为单位(例如,它在 video.currentTime 时间线上的时间戳)。
  • presentedFramesunsigned long 类型,提交用于合成的帧数的计数。允许客户端确定 VideoFrameRequestCallback 实例之间是否丢失帧。
  • processingDurationdouble 类型,从将具有与此帧相同的呈现时间戳 (PTS) 的编码数据包(例如,与 mediaTime 相同)提交到解码器直到解码的帧准备好呈现所经过的持续时间(以秒为单位)。

对于 WebRTC 应用程序,可能会出现其他属性:

  • captureTimeDOMHighResTimeStamp 类型,对于来自本地或远程源的视频帧,这是摄像机捕获帧的时间。对于远程源,使用时钟同步和 Rtcp 发送方报告来估计捕获时间,以将 RTP 时间戳转换为捕获时间。
  • receiveTimeDOMHighResTimeStamp 类型,对于来自远程源的视频帧,这是平台接收到编码帧的时间,即通过网络接收到属于该帧的最后一个数据包的时间。
  • rtpTimestampunsigned long 类型,与此视频帧关联的 RTP 时间戳。

请注意,在某些情况下,width 和 height 可能与 videoWidth 和 videoHeight 不同(例如,变形视频可能具有矩形像素)。

在上面的参数列表中特别值得关注的是 mediaTime ,在 Chromium 的实现中,使用音频时钟作为支持 video.currentTime 的时间源。而 mediaTime 直接由帧的 presentationTimestamp 填充。如果希望以可再现的方式准确地标识帧,包括准确地识别错过的帧,那么应该使用 mediaTime

总结

能够在浏览器中访问相机而不使用第三方软件是一个不可思议的进步。与 canvas 和一些javascript相结合,相机变得快速而容易访问。它不仅可以使用相机,而且因为 canvas 是超灵活的,将能够在未来添加性感的 instagram 风格的图像滤镜。

到此这篇关于浏览器视频帧操作方法 requestVideoFrameCallback()的文章就介绍到这了,更多相关js requestVideoFrameCallback内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 浏览器视频帧操作方法 requestVideoFrameCallback()

本文链接: https://lsjlt.com/news/165537.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浏览器视频帧操作方法 requestVideoFrameCallback()
    目录前言与 requestAnimationFrame() 的区别浏览器支持使用方法总结前言 近期发现一个很酷的应用场景,对着摄像头做动作,然后分析器动画渲染到 3D 模型上,在了解...
    99+
    2024-04-02
  • Win11 edge浏览器看视频绿屏解决方法
    如果您在Windows 11的Edge浏览器中观看视频时遇到绿屏问题,您可以尝试以下解决方法:1. 更新浏览器:确保您的Edge浏览...
    99+
    2023-09-02
    win11
  • [视频]win10 10122预览版上手操作视频
    今天早些时候微软面向Windows Insider成员推送了版本号为10122的Windows 10系统,带来了开始菜单和Edge浏览器在内的诸多改变。在下面的视频中外媒对新版Windows 10进行了初步上手,让我们来...
    99+
    2023-06-15
    win10 10122 预览版 视频
  • Win8系统无法用QQ浏览器看视频怎么办 Win8电脑QQ浏览器无法看视频的解决方法
    原因分析:   1、其实对于网络大神来说,FLASH插件是人人都知道的网络支持的插件,如果懂FLASH的大神可以跳过这一条;   2、首先说FLASH插件分为IE内核和非IE内核,例如火狐、谷歌是非IE内核...
    99+
    2022-06-04
    浏览器 视频 解决方法
  • node制作一个视频帧长图生成器操作分享
    目录前言效果展示工具实现获取视频时长控制台交互获取相关参数计算截取图片的时间点集合获取每一个时间点的视频帧截图图片拼接长图前言 平时我们在发布视频的时候通常都需要从视频中截取一帧图片...
    99+
    2022-11-13
    node制作视频帧长图生成器 node制作成器
  • Python快速从视频中提取视频帧的方法详解
    目录1、抽取视频帧2、多线程方法3、整体代码补充Python快速提取视频帧(多线程) 今天介绍一种从视频中抽取视频帧的方法,由于单线程抽取视频帧速度较慢,因此这里我们增加了多线程的方...
    99+
    2024-04-02
  • Python实现视频分帧的方法分享
    目录下载依赖实现方法一方法二方法三下载依赖 pip install opencv-python==4.0.0.21 实现 方法一 def video_to_frames(video...
    99+
    2023-03-24
    Python实现视频分帧 Python视频分帧
  • windows edge浏览器idm怎么下载视频
    这篇文章主要介绍了windows edge浏览器idm怎么下载视频的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇windows edge浏览器idm怎么下载视频文章都会有所收获,下面我们一起来看看吧。edge浏...
    99+
    2023-07-01
  • [视频]Win10 build 9901 消费者预览版操作视频抢先看
    尽管微软尚未透露Windows 10消费者预览更多内容。显然,Cortana是本次更新的重头戏之一。但除此之外,整个操作系统上的应用也进行了全面的更新。 视频截图 ...
    99+
    2023-06-09
    Win10 build9901 build 9901 消费者 视频
  • Python从视频中提取音频的操作方法
    这篇文章给大家分享的是有关Python从视频中提取音频的操作方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。简介OpenCV中使用VideoCapture类写的视频是没有音频的,如果要进一步处理音频则需要用到一...
    99+
    2023-06-14
  • [视频]Win10最新消费者预览平板版视频操作演示
     微软的“下一篇章”(The Next Chapter)Win10发布会已经结束,微软这次可谓带给我们不少惊喜。在这次发布会上我们见到了最新的Win10消费者预览版、Surface Hu...
    99+
    2023-06-10
    Win10平板版 Win10预览版 平板 预览 消费者 Win10
  • edge浏览器播放视频黑屏怎么办
    小编给大家分享一下edge浏览器播放视频黑屏怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、按组合键“win+r”唤出运行,输入“gpedit.msc”,...
    99+
    2023-06-28
  • 用python操作浏览器的三种方式
    第一种:selenium导入浏览器驱动,用get方法打开浏览器,例如: import time from selenium import webdriver def mac():     driver = webdriver.Fire...
    99+
    2023-01-31
    三种 浏览器 操作
  • 电脑浏览外网操作方法是什么
    这篇文章主要介绍了电脑浏览外网操作方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇电脑浏览外网操作方法是什么文章都会有所收获,下面我们一起来看看吧。电脑浏览外网操作方法介绍:首先打开电脑,找到电脑“控制...
    99+
    2023-07-01
  • pygame+opencv实现读取视频帧的方法示例
    由于pygame.movie.Movie.play() 只支持MPEG格式的视频,且 pygame版本大于1.9.5好像已经不支持这个模块了,所以决定使用与opencv读取视频帧的画...
    99+
    2024-04-02
  • Ubuntu 20.04火狐浏览器无法播放视频怎么解决
    这篇文章主要介绍了Ubuntu 20.04火狐浏览器无法播放视频怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Ubuntu 20.04火狐浏览器无法播放视频怎么解决文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-06-28
  • win10预览版10049斯巴达浏览器上手评测视频
      win10预览版10049中大家期待已久的斯巴达浏览器终于来了,那么到底斯巴达浏览器的使用效果怎么样呢下文小编就为大家带来win10预览版10049斯巴达浏览器的评测视频,一起去看下吧。 win10预览版10049下...
    99+
    2023-06-13
    win10预览版10049 浏览器 斯巴达 预览 win10
  • 怎么检测浏览器是否支持html5视频
    这篇文章主要为大家展示了“怎么检测浏览器是否支持html5视频”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么检测浏览器是否支持html5视频”这篇文章吧。运...
    99+
    2024-04-02
  • windows edge浏览器看视频卡顿如何解决
    这篇文章主要讲解了“windows edge浏览器看视频卡顿如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“windows edge浏览器看视频卡顿如何解决”吧!edge浏览器看视频卡...
    99+
    2023-07-01
  • windows edge浏览器看视频黑屏如何解决
    这篇文章主要介绍“windows edge浏览器看视频黑屏如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“windows edge浏览器看视频黑屏如何解决”文章能帮助大家解决问题。edge浏览...
    99+
    2023-07-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作