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

2024-08-21 16:28

本文主要是介绍从图像到视频:Web Codecs API编码技术解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

初探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, // 960height: HEIGHT,// 540hardwareAcceleration: "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

这篇关于从图像到视频:Web Codecs API编码技术解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093676

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

解决JavaWeb-file.isDirectory()遇到的坑问题

《解决JavaWeb-file.isDirectory()遇到的坑问题》JavaWeb开发中,使用`file.isDirectory()`判断路径是否为文件夹时,需要特别注意:该方法只能判断已存在的文... 目录Jahttp://www.chinasem.cnvaWeb-file.isDirectory()遇

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开