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

Web 音视频(一)基础知识

前言

阅读后续文章或开始使用 WebAV 处理音视频数据之前,需要一点点背景知识。

本篇主要简单介绍音视频最基础的知识,以及 WebCodecs 的核心 API。

视频结构

视频文件可以理解为容器包含了元数据和编码数据(压缩的音频或视频);
不同的容器格式有各种区别,比如用不同方式组织管理元数据和编码数据。

图片

编码格式

编码目的是为了压缩,各种编码格式就是不同的压缩算法;
因为采样获取的原始数据(图像、音频)体积过于庞大,不压缩几乎无法存储、传输;

不同的编码格式有不同的压缩率、兼容性、复杂度
一般来说越新的格式压缩率越高、兼容性越差、复杂度越高;
不同的业务场景(点播、直播、视频会议)的诉求会在这三个因素之间做权衡选择。

常见视频编码格式

  • H264 (AVC), 2003

  • H265 (HEVC), 2013

  • AV1, 2015

常见音频编码格式

  • MP3, 1991

  • AAC, 2000

  • Opus, 2012

封装(容器)格式

编码数据是压缩后的原始数据,需要元数据来描述才能被正确解析播放;
常见的元数据包括:时间信息,编码格式,分辨率,码率等等。

在 Web 平台最常见、兼容性最好的视频格式是 MP4,所以后续示例程序处理的都是 MP4 文件。

MP4 封装 AVC(视频编码)、AAC(音频编码)是兼容性最优的组合

其他常见格式

  • FLV,flv.js 主要是将 FLV 转封装成 fMP4,使得浏览器能播放 FLV 格式的视频

  • WebM,免费, MediaRecorder 输出的就是 WebM 格式

WebCodecs 核心 API

图片

由上图可知,WebCodecs 工作在编解码阶段,不涉及封装、解封装

上图节点与 API 的对应关系
视频

  • 原始图像数据:[VideoFrame]

  • 图像编码器:[VideoEncoder]

  • 压缩图像数据:[EncodedVideoChunk]

  • 图像解码器:[VideoDecoder]

数据转换关系:
VideoFrame -> VideoEncoder => EncodedVideoChunk -> VideoDecoder => VideoFrame

图片

图片

音频

  • 原始音频数据:[AudioData]

  • 音频编码器:[AudioEncoder]

  • 压图音频数据:[EncodedAudioChunk]

  • 音频解码器:[AudioDecoder]

音频数据转换跟视频对称

编解码、音视频这种对称易于理解掌握,这也是 WebCodecs 目标之一。

Symmetry: have similar patterns for encoding and decoding

WebCodecs API 注意事项

记录新手容易碰到的陷阱

  • VideoFrame 可能占用大量显存,及时 close 避免影响性能

  • VideoDecoder 维护了队列,其输出(output)的 VideoFrame 需要及时 close 否则它将暂停输出 VideoFrame

  • 要及时检查 [encodeQueueSize] , 编码器若来不及处理则需要暂停生产新的 VideoFrame

  • 编解码器使用完后需要主动 close,比如 [VideoEncoder.close],否则可能阻塞其他编解码器正常工作

关于优联前端

        武汉优联前端科技有限公司由一批从事前端10余年的专业人才创办,是一家致力于H5前端技术研究的科技创新型公司,为合作伙伴提供专业高效的前端解决方案,合作伙伴遍布中国及东南亚地区,行业涵盖广告,教育, 医疗,餐饮等。有效的解决了合作伙伴的前端技术难题,节约了成本,实现合作共赢。承接Web前端,微信小程序、小游戏,2D/3D游戏,动画交互与UI广告设计等各种技术研发。

 

相关文章:

Web 音视频(一)基础知识

前言 阅读后续文章或开始使用 WebAV 处理音视频数据之前,需要一点点背景知识。 本篇主要简单介绍音视频最基础的知识,以及 WebCodecs 的核心 API。 视频结构 视频文件可以理解为容器包含了元数据和编码数据(压缩的音频或视频)…...

数字化时代,传统代理模式的变革之路

在数字化飞速发展的今天,线上线下融合(O2O)成了商业领域的大趋势。这股潮流,正猛烈冲击着传统代理模式,给它带来了新的改变。 咱们先看看线上线下融合现在啥情况。线上渠道那是越来越多,企业纷纷在电商平台…...

Linux 高级路由与流量控制-用 tc qdisc 管理 Linux 网络带宽

大家读完记得觉得有帮助记得关注和点赞!!! 此分享内容比较专业,很多与硬件和通讯规则及队列,比较底层需要有技术功底人员深入解读。 Linux 的带宽管理能力 足以媲美许多高端、专用的带宽管理系统。 1 队列&#xff0…...

【数据库知识】PostgreSQL介绍

PostgreSQL介绍 概述一、起源与发展二、特性与功能三、PL/pgSQL语言四、应用场景五、配置与优化 核心概念一、基础数据结构二、数据操作三、高级特性四、应用场景 多版本控制MVCC说明一、MVCC的基本概念二、MVCC的实现原理三、MVCC的工作流程四、MVCC的优势五、MVCC的局限性 可…...

软考,沟通管理

软件沟通管理 已发送、巳收到、已理解、己认可、已转化为积极的行动 有效的沟通活动和成果创建具有如下3个基本属性:①沟通目的明确;②尽量了解沟通接收方,满足其需求及偏好;③监督并衡量沟通的效果。 让干系人参加项目会议&…...

Linux 存储设备和 Ventoy 启动盘制作指南

一、Linux 存储设备基础知识 1. 设备路径(/dev) 设备路径是 Linux 系统中物理存储设备的唯一标识,类似设备的"身份证号"。 命名规则解析 /dev/sda: /dev:device(设备)的缩写&…...

Android SystemUI——CarSystemBar车载状态栏(九)

上一篇文章我们介绍了车载开发中的 CarSystemUI,而车载开发中的状态栏也被 CarSystemBar 所取代,这里我们就来看看一下车载系统中的状态栏——CarSystemBar。 一、车载状态栏创建 1、CarSystemBar 源码位置:/packages/apps/Car/SystemUI/src/com/android/systemui/car/sy…...

多级缓存 JVM进程缓存

目录 多级缓存 1.什么是多级缓存 2.JVM进程缓存 2.1 导入案例 2.2 初识Caffeine 2.3 实现JVM进程缓存 2.3.1 需求 2.3.2 实现 3.Lua语法入门 3.1 初识Lua 3.1 HelloWorld 3.2.变量和循环 3.2.1 Lua的数据类型 3.2.3 循环 3.3 条件控制、函数 3.3.1 函数 3.3.2 条件控制 3.3.3 案…...

使用Chrome和Selenium实现对Superset等私域网站的截图

最近遇到了一个问题,因为一些原因,我搭建的一个 Superset 的 Report 功能由于节假日期间不好控制邮件的发送,所以急需一个方案来替换掉 Superset 的 Report 功能 首先我们需要 Chrome 浏览器和 Chrome Driver,这是执行数据抓取的…...

如何让大语言模型更好地理解科学文献?

论文地址:https://arxiv.org/pdf/2408.15545 引言 科学文献的理解对于提取目标信息和获取洞察至关重要,这显著推动了科学发现。尽管大语言模型(LLMs)在自然语言处理方面取得了显著成功,但在科学文献理解方面仍面临挑战…...

anaconda安装和环境配置

文章目录 一、Anaconda下载1.从官网直接下载:2.从镜像站中下载: 二、Anaconda安装三、检测是否有Anaconda配置anaconda环境 四、 Anaconda创建多个python环境(方便管理项目环境)1.查看conda有哪些环境2.创建python3.6的环境3.激活…...

Python基础学习(五)文件和异常

文件操作, 使用代码 来读写文件 1, 可以将数据保存到文件中, 2, 自动化, 测试数据在文件中保存的, 从文件中读取测试数据,进行自动化代码的执行 1.文件 文件: 可以存储在长期存储设备(硬盘, U盘)上的一段数据即为文件 1, 计算机只认识 二进制数据(0 和 1) 2, 所有的文件在计算…...

Mono里运行C#脚本29—mono_trampolines_init

一、概念解释 在计算机编程中,trampoline 通常是一段代码,它起到一个中间跳转的作用。它就像一个跳板,程序可以先跳转到这个跳板上,然后再从跳板跳转到最终的目的地。这种技术在许多不同的场景中都有应用,以下是一些主要方面: 函数调用方面: 当涉及到不同执行环境或不…...

从语音识别到图像识别:AI如何“看”和“听”

引言 随着人工智能技术的不断进步,AI的“听”和“看”能力正变得越来越强大。从语音识别到图像识别,AI不仅能够通过声音与我们互动,还能通过视觉理解和分析周围的世界。这些技术不仅改变了我们与机器的交互方式,也在各行各业中带…...

vue3+ts+uniapp 微信小程序(第一篇)—— 微信小程序定位授权,位置信息权限授权

文章目录 简介一、先看效果1.1 授权定位前,先弹出隐私协议弹框1.2 上述弹框点击同意,得到如下弹框1.3 点击三个点,然后点设置 1.4 在1.2步骤下,无论同意或者拒绝 二、manifest.json 文件配置三、微信公众平台配置3.1 登录进入微信…...

回归算法、聚类算法、决策树、随机森林、神经网络

这也太全了!回归算法、聚类算法、决策树、随机森林、神经网络、贝叶斯算法、支持向量机等十大机器学习算法一口气学完!_哔哩哔哩_bilibili 【线性回归、代价函数、损失函数】动画讲解_哔哩哔哩_bilibili 14分钟详解所有机器学习算法:…...

[Qt]系统相关-文件操作-QFile、QFileInfo类以及相关操作函数

目录 一、Qt文件系统 1.Qt文件系统的介绍 2.Qt文件类 二、Qt文件的操作 1.文件的打开 2.文件的读写操作 3.关闭操作 4.接口使用案例 5.获取文件的相关属性 三、文件的分类 1.文本文件 2.二进制文件 3.二者的区别 一、Qt文件系统 1.Qt文件系统的介绍 文件操作是所…...

C#高级:用Csharp操作鼠标和键盘

一、winform 1.实时获取鼠标位置 public Form1() {InitializeComponent();InitialTime(); }private void InitialTime() {// 初始化 Timer 控件var timer new System.Windows.Forms.Timer();timer.Interval 100; // 设置为 100 毫秒,即每 0.1 秒更新一次timer.…...

Mac 使用 GVM 管理多版本 Go 环境

使用 GVM 管理多版本 Go 环境 在本文中,我们将使用 gvm(Go Version Manager)工具管理本地多个 Go 语言版本。gvm 功能类似于 Python 的 Anaconda,可以方便地切换不同版本的 Go 环境,非常适合需要多版本开发与测试的场…...

25届合肥工业大学自动化考研复试攻略

本文内容,全部选自联盟自动化考研联盟企业店的:《合肥工业大学控制综合笔试篇》。后续会持续更新更多内容,记得关注哦~ 目录 Part1:复试指南具体内容 Part2:复试复习相关介绍 Part1:复试指南具体内容 1…...

四旋翼变形控制:RL与MPC在混合动力学中的对比

1. 四旋翼变形控制的技术挑战与解决方案四旋翼变形控制(Quadrotor Morpho-Transition)是当前机器人领域最具挑战性的前沿技术之一。这项技术使机器人能够在空中完成形态变换,实现从飞行模式到地面模式的平滑切换。想象一下,一架四…...

Unity安卓构建实战指南:解决APK真机安装闪退与构建失败

1. 这不是一本“从零开始”的书,而是一份你真正上手Unity安卓游戏开发前必须撕开的说明书我带过三届Unity实习工程师,也帮二十多个独立开发者把Demo打包进Google Play。每次看到新人在“安卓构建失败”报错里反复挣扎,或者对着“IL2CPP编译卡…...

保姆级教程:在ROS2 Humble/Foxy的Gazebo中配置RGB-D相机(附解决点云颜色/坐标问题)

ROS2 Humble/Foxy中Gazebo深度相机仿真全攻略:从配置到点云问题解决在机器人仿真开发中,深度相机(RGB-D)是不可或缺的传感器之一。它能够同时提供彩色图像和深度信息,为SLAM、物体识别、避障等任务提供关键数据支持。本…...

告别沉浸式白屏!UniApp中iOS/Android底部安全区与顶部状态栏颜色自定义全攻略

告别沉浸式白屏!UniApp中iOS/Android底部安全区与顶部状态栏颜色自定义全攻略当开发者尝试在UniApp中实现沉浸式设计时,往往会遇到一个令人头疼的问题——默认的白色安全区和状态栏导致界面元素(如电池图标、信号强度)几乎不可见。…...

诚信标签工厂端解决方案 适配俄标 CRPT 体系一体化技术方案

俄罗斯诚实标签依托 CRPT 体系执行强制管控,各类出口货品必须完成 Data Matrix 编码采集、格式转换、多层包装数据绑定,数据合规后方可通关流通。美妆食品、日化建材、玩具五金等品类包装形态差异较大,人工采集方式普遍存在识别精度不足、批量…...

从Gamma函数到泊松分布:一个概率论中的含参量积分实用案例解析

Gamma函数与泊松分布:概率论中的数学之美 在数据科学和机器学习的实践中,概率分布构成了建模的基石。当我们深入探究这些分布背后的数学原理时,Gamma函数以其优雅的性质和广泛的应用脱颖而出。它不仅连接了离散与连续概率世界,更在…...

第二周(第12周)

1.单电源供电的二阶低通滤波器2.功率放大电路...

服务器日志分析实战:用Python追踪HTTP 404错误并可视化异常频率

作为一名爬虫开发者或网站运维人员,服务器日志就像飞机的“黑匣子”——它记录了每个请求的来龙去脉。而404错误(页面未找到)尤其值得关注:它可能是用户输错了网址,可能是你爬虫的URL构造逻辑有漏洞,也可能是网站改版后旧的链接失效了。更严重的是,大量突然涌出的404请求…...

录音会议纪要整理不同使用场景,实用口碑选择建议

针对不同场景的录音整理需求(短录音、中长录音、长内容深度整理),本文基于实际使用体验,分享不同场景下的工具选择建议与使用心得。一、场景一:短录音(15-60分钟,发音清晰)典型场景&…...

当 AI Coding 进入复杂企业系统,为什么提效远没有宣传里那么美好 ?

以 Claude Code、Codex 为代表的自主编码智能体(Coding Agents),正在以惊人的速度席卷软件开发者生态。与此同时,类似“10 倍开发效率”“普通人也能随手构建软件”“程序员即将失业”的说法,也随处可见。这种不分场景…...