从图像到视频:Web Codecs API编码技术解析

news2024/9/19 18:14:48

初探Web Codecs API 三

前言

在之前的文章中,咱们简单的介绍了解码相关的东西,这一节咱们来简单聊聊编码相关的东西。

编码的目的就是为了压缩,去除空间、时间维度的冗余。

这里又不得不提起前面所说的I 帧P 帧B 帧IDR 帧

众所周知,视频是连续的图像序列,由连续的帧构成,一帧就是一幅图像。

直接存储图片需要占用大量的存储空间,而且传输也不方便。

为了解决这个问题,于是视频编码出现了,它的作用就是将一张一张的图片压缩成一个视频格式,以便通过特定的解码器对其进行解码、播放。

介绍

其大概过程如下:

编码器

首先来说,我们要明确我们使用什么编码格式,然后再对编码器进行设置。

编码器是 WebCodecs API 中的 VideoEncoder 类, 在我们对其实例化后,就需要通过 configure 方法进行配置;

我们可以通过 isConfigSupported 方法去验证配置是否支持;

Config 的参数如下:

codec:包含有效编解码器字符串的字符串;
width: 比特率调整前输出 Encoded VideoChunk 的宽度,单位为像素(可选);
height:比特率调整前输出 Encoded VideoChunk 的高度,单位为像素(可选);
displayWidth:显示时每个输出 Encoded VideoChunk 的预期显示宽度,单位为像素(可选);
displayHeight:显示时每个输出 Encoded VideoChunk 的预期显示高度,单位为像素(可选);
hardwareAcceleration:编解码器硬件加速方法的提示;
bitrate:含编码视频的平均比特率,单位为比特每秒;
framerate:预期的帧速率,单位为每秒帧数;
alpha:是否丢弃 VideoFrame 输入的 alpha 分量;
scalabilityModeWebRTC中定义的编码可伸缩性模式标识符;
bitrateMode:比特率模式(可选);
latencyMode: 配置此编解码器延迟行为的值(可选);

关于配置参数的具体内容请查阅 MDN

我们使用的配置为:

{
   
    codec: "avc1.420034",
    width: WIDTH, // 960
    height: HEIGHT,// 540
    hardwareAcceleration: "prefer-software",
    avc: {
    format: "annexb" }, // 这个好像有点问题
}

这样我们就配置好了编码器

编码器是为了对帧进行编码,那么我们的帧从哪里来呢?

就要用到 Web Codecs API 中的 VideoFrame 类;

创建帧对其实例化就行;

其参数如下:

image:新视频帧的图像数据的图像,可以是 SVGImageElement、HTMLVideoElement、HTMLCanvasElement、ImageBitmap、OffscreenCanvas 或其他 VideoFrame。
options:{
   
    duration: 帧的持续时间,单位为微秒(可选);
    timestamp: 帧的时间戳,单位为微秒;
    alpha:如何处理alpha通道(可选);
    visibleRect:VideoFrame可见矩形的对象(可选);
    displayWidth:应用宽高比调整后显示的VideoFrame的宽度,单位为像素(可选);
    displayHeight:应用宽高比调整后显示的VideoFrame的高度,单位为像素(可选);
}

我们为了方便 参数只选择了必要的 timestamp

const frame = new VideoFrame(canvas, {
    timestamp });

到这里我们的编码所需的图像就准备好了。

调用videoEncoder

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2073413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【添加核心机械臂动力学】Model and Control a Manipulator Arm with Robotics and Simscape

机械臂动力学 为了设计控制器,机械臂动力学必须表示给定力矩输入的关节位置。这在机械臂动力学子系统中通过一个前向动力学块实现,该块将关节力矩转换为给定当前状态的关节加速度,然后通过两次积分得到完整的关节配置。积分器初始化为q0和dq…

自闭症托管托养机构:星贝育园的优势与使命

在当今社会,自闭症儿童作为一群需要特别关注和照顾的群体,其教育与康复问题日益受到社会各界的重视。自闭症托管托养机构作为这一领域的重要力量,承担着为自闭症儿童提供全方位、个性化支持的重任。星贝育园,作为一所全日寄宿制的…

使用libsvm时遇到MATLAB has encountered an internal problem and needs to close

最近在MATLAB中使用libsvm跑别人的程序,该程序在大部分数据集上可以正常运行,但在有一个数据集上运行时MATLAB会报“MATLAB has encountered an internal problem and needs to close”的错误: 凭直觉猜应该是数据集有啥问题,但又…

AI人的列表!《中国人工智能学会推荐国际学术会议和国际/国内期刊目录》正式发布

在全球科技迅猛发展的今天,人工智能(AI)已成为推动社会进步的关键力量。为了更好地指导AI领域的科研方向,加强学术交流,促进学术成果的创新与应用,中国人工智能学会(CAAI)在2024年8月…

数据分析案例-2024年裁员数据集可视化分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

XFTP软件的使用 ---- 远程上传、下载文件

本文假设你的电脑里面已经有XFTP软件。 一、简介 是一个基于 windows 平台的功能强大的SFTP、FTP文件传输软件。通过Xftp软件,windows 用户能安全地在UNIX/Linux 和 Windows PC 之间传输文件。 二、 使用方法【步骤】 打开软件,得到如下图界面。 首先我…

STL--unordered_set和unordered_map的模拟实现

1.unordered系列关联式容器 在C98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很…

如何使用ssm实现基于java斗车交易系统设计与实现+vue

TOC ssm082基于java斗车交易系统设计与实现vue 系统概述 1.1 概述 随着社会的快速发展,计算机的影响是全面且深入的。人们的生活水平不断提高,日常生活中人们对斗车交易方面的要求也在不断提高,需要咨询的人数更是不断增加,使得…

OpenCV 图像处理基础算法介绍c++

VS2022配置OpenCV环境 关于OpenCV在VS2022上配置的教程可以参考:VS2022 配置OpenCV开发环境详细教程 图像处理 图像处理是一个广泛的领域,它涉及到对图像数据进行分析、修改和改进的各种技术。以下是一些基本的图像处理操作,这些操作通常可…

模型 蒂蒙斯创业过程

系列文章 分享 模型,了解更多👉 模型_思维模型目录。机会、团队、资源:创业成功的三角。 1 蒂蒙斯创业过程的应用 1.1 京东:蒂蒙斯模型下创业成功的典范 京东是中国知名的电子商务平台,其早期发展阶段充分体现了蒂蒙…

接口基础知识12:cookie、session和token

​课程大纲 ‌Cookie、Session和Token是Web应用中常用的身份验证和会话管理机制,各有特点,适用于不同的应用场景。 一、Cookie 1.1 什么是Cookie Cookie是存储在客户端浏览器中的小段数据,通常用于存储用户偏好设置或用于跟踪用户活动。 C…

51单片机——数码管控制

1、数码管介绍 LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件。 2、数码管驱动方式 单片机直接扫描:硬件设备简单,但会耗费大量的单片机CPU时间 专用驱动芯片:内部自…

8月24日笔记

ew的使用 EW(EarthWorm)是一套基于C语言开发的轻量级且功能强大的网络穿透工具,它支持Socks5代理、端口转发及端口映射等功能,能够在复杂的网络环境中实现高效稳定的网络穿透。这款全平台适用的工具(包括Windows、Lin…

proc文件的写操作机制

“一切皆是文件”。 Linux的基本哲学之一。它是指linux系统中的所有一切都可以通过文件的方式访问、管理,即便不是文件,也以文件的形式来管理。例如硬件设备、进程、套接字等都抽象成文件,使用统一的用户接口,虽然文件类型各不相同…

ComfyUI IPAdapter plus的模型应该怎么装-免费版-2024.8.25

🎆背景 ipadapter相关的节点大家应该都不陌生,具体是做什么的就不详细介绍了,但是还是有很多新入门的朋友不太了解这个节点相关的这一堆模型到底应该怎么安装。这里就借着官方节点的介绍来大概讲下这个话题。 涉及到的节点源地址&#xff1…

大数据技术之Zookeeper安装 (2)

目录 下载地址 本地模式安装 1)安装前准备 2)配置修改 3)操作 Zookeeper 配置参数解读 Zookeeper 集群操作 集群规划 解压安装 配置服务器编号 配置 zoo.cfg 文件 集群操作 Zookeeper 集群启动停止脚本 创建脚本 增加脚本执行权限 …

宠物毛发会携带病菌源吗?宠物店空气净化器使体验分享

近期,我接诊了一位肺结节患者,他的第一反应便是联想到家中的猫咪。这种担忧并非毫无根据,过敏体质的人群,无论是对毛发还是排泄物敏感,养宠物都会增加患结节的风险。即便不存在过敏问题,宠物毛发作为病菌的…

Transforms的学习以及地址问题

一、地址问题 在学习Dataset类的实战与Tensboard的学习中,有出现一些地址的问题: 1、相对地址 相对地址的使用: 使用于在从端口中,打开TensorBoard的页面。使用的就是相对地址;例如: tensorboard --log…

MySQL创建与删除表

一、创建表 1.1 使用DDL语句创建表 CREATE TABLE 表名(列名 类型,列名 类型......); character set:如不指定则为所在数据库字符集collate:如不指定则为所在数据库校对规则 查看表 show tables; 1.2 使用Navicat创建表 二、删除表 2.1 使用DDL语句删除…

chapter08-面向对象编程(继承)day08

目录 287-继承原理图 288-继承快速入门 289-继承使用细节1 290-继承使用细节2 291-继承使用细节3 292-继承使用细节4 293-继承使用细节5 294-继承本质详解(重要) 287-继承原理图 288-继承快速入门 289-继承使用细节1 子类继承了所有的属性和方法…