音视频面试涨知识(二)

news2025/2/27 23:24:42

1.YUV知识点

1.1 为什么要有YUV

  • YUV的亮度信号Y和色度信号U/V是分离的,如果只有Y信号分量而没有U/V分量,这样的图像就是黑白灰度图像,从黑白到彩色的兼容方案。

  • 相对RGB,YUV的最大优点是只占用较小的频宽,RGB需要至少三个独立的视频信号,而YUV需要两个视频信号(Y表示明亮度,UV表示色彩和饱和度)。

  • 编码时使用YUV可以去掉很多冗余信息,人眼对亮度更敏感,对色度敏感性不高,因此可以较多地压缩UV数据。

1.2 YUV的种类

YUV是按照人眼设计出来的一套颜色方案,目前有三种格式:

  • YUV420,由 4 个 Y 分量共用一套 UV 分量

  • YUV422,由 2 个 Y 分量共用一套 UV 分量

  • YUV444,不共用,一个 Y 分量使用一套 UV 分量

按照YUV的排列顺序,也分为三种类型

  • Planar YUV:三个分量分开存放

  • Semi-Planar:Y分量单独存放,UV分量交错存放

  • Packed YUV:三个分量全部交错存放

1.3 为什么受损的视频数据通常是绿色

视频的数据是YUV排列的,最终显示要转化为RGB,转换的公式如下:

R=clip(Y+1.13983*(V-128), 0, 255)
G=clip(Y-0.39465*(U-128)-0.58060*(V-128), 0, 255)
B=clip(Y+2.03211*(U-128), 0, 255)

如果视频数据损坏,即Y=0 U=0 V=0,最终得到的是R和B为0, G=125,所以整体的画面显示为绿色。

1.3 NV21转化为YUV420

NV21是相机采集出来的YUV数据排列,YUV420是正常视频编码器支持的排列方式。

  • NV21:YUV 420 Semi-Planar,Y 分量单独存放,UV 分量交错存放,与 NV12 不同的是,UV 在排列的时候,从 V 开始。总长度为 w * h * 1.5

Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
V U V U V U
V U V U V U
V U V U V U
  • I420:YUV 420 Planar,YUV分量分别存放,先是 w * h 长度的Y,后面跟w * h * 0.25长度的U,最后是 w * h * 0.25长度的V,总长度是 w * h * 1.5

Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
Y Y Y Y Y Y
U U U
U U U
U U U
V V V
V V V
V V V

了解清楚NV21和I420的区别,转换就比较容易了。

2.H264/H265知识点

2.1 H264编码流程

  • 帧类型分析

  • 预测处理,I帧采用帧内预测和块的划分,P帧和B帧采用帧间预测和块的划分。帧内预测解决的是空间冗余问题,帧间预测解决是时间冗余问题。

  • 变换+量化处理,把经过预测后的残差数据经过DCT转换,低频的数据集中在左上,高频数据集中在右下,人眼对高频信息不敏感,可以压缩地多一些。

  • 熵编码,通过CAVLC方式把像素值进一步压缩为二进制流。

简而言之:

  • 以宏块来细分图片,并最终以块来细分

  • 使用帧间压缩技术来减少空间冗余

  • 使用帧内压缩技术减少时间冗余(运动估计和补偿)

  • 使用转换和量化来进行残留数据压缩

  • 使用熵编码减少残留和运动矢量传输和信号发送中的最后冗余

同一帧相邻像素值相等、相似或者缓变的概率很大,编码器通过算法将图像划分为一块一块的,然后逐块进行后续的压缩处理。 帧内预测是同一帧内部处理。 帧间预测是不同帧之间处理,相邻帧之间也会出现相似或者缓变的情况。 H264中将16x16大小的块称为宏块,在做帧内和帧间预测的时候,也会划分为8x8/4x4的字块

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

2.2 H264和H265比较

技术对比:

  • 可变化的尺寸转换(4x4到32x32),宏块不再固定

  • 四叉树结构的预测区域(64x64到4x4)

  • 基于候选清单的运动向量预测

  • 多种帧内预测模式

  • 更精准的运动补偿滤波器

  • 优化的区块、采样点自适应偏移滤波器

结果对比:

  • 码率低,编码效率高:以编码单位来说, 最小的8x8到最大的64x64。信息量不多的区域(颜色变化不明显,比如车体的红色部分和地面的灰色部分)划分的宏块较大,编码后的码字较少,而细节多的地方(轮胎)划分的宏块就相应的小和多一些,编码后的码字较多,这样就相当于对图像进行了有重点的编码,从而降低了整体的码率,编码效率就相应提高了。

  • 占存储空间少:反复的质量比较测试已经表明,在相同的图像质量下,相比于H.264,通过H.265编码的视频码流大小比H.264减少大约39-44%。

  • 编码算法效率高:同时,H.265的帧内预测模式支持33种方向(H.264只支持8种),并且提供了更好的运动补偿处理和矢量预测方法。

  • 网络适应能力更强:在码率减少51-74%的情况下,H.265编码视频的质量还能与H.264编码视频近似甚至更好,其本质上说是比预期的信噪比(PSNR)要好。H.264可以在低于2Mbps的速度实现标清数字图像传送,而H.265/HEVC可以在低于1.5Mbps的传输带宽下,实现1080p全高清视频传输。

2.3 基本概念

  • SPS/PPS/VPS

    • SPS:Sequence Parameters Set(序列参数集),主要包含profile、profile_level、视频的宽和高等等,没有SPS无法正确解码。

    • PPS:Picture Parameters Set(图片参数集),包括熵编码的使用算法,slice group中的个数等编码相关的参数。

    • VPS:Video Parameters Set(视频参数集),H265才有,VPS主要用于传输视频分级信息,有利于兼容标准在可分级视频编码或多视点视频的扩展。

  • NALU起始码

    • H264格式有两种方式,Annex B格式和AVCC格式,其中Annex B格式比较常见,它是由起始码的。

    • Annex B格式用开始码来解决这个问题,即给每个NALU加上前缀码:2个或者3个0x00,后面再加一个0x01, 如:0x000001或者0x00000001。这是由向每个这种类型的序列插入防竞争字节0x03实现的,那么插入防竞争字节后,0x000001变成了0x00000301。

  • 一帧多Slice

    • 正常情况下,H264的一帧只有一个Slice,但是某些编码器吐出的数据会存在一帧有多个Slice的情况。这种需要特别兼容下,将Slice中数据取出来memcpy到一起,这样处理之后不会存在兼容性问题。

  • SEI

    • SEI 即补充增强信息(Supplemental Enhancement Information),属于码流范畴,它提供了向视频码流中加入额外信息的方法,是 H.264 标准的特性之一。

    • 在直播场景,我们通常使用 SEI 来携带推流端的信息,一直随着直播流传输到播放端。由于 SEI 是绑定着视频帧,所以它可以支持诸如:

      • 统计直播推流端到播放端延时。

      • 支持和视频帧绑定的内容交互。比如,直播答题在播放端的弹窗等。

3.MP4和FLV知识点

3.1 FLV

FLV是一种流媒体格式,体积小、协议简单,主要用在直播领域,RTMP协议推流会封装成FLV格式的视频。

FLV = FLV header + FLV file body
FLV file body = PreviousTagSize0 + Tag1 + PreviousTagSize1 + Tag2 + ... + PreviousTagSizeN-1 + TagN

FLV tag分为三种类型:

  • Video Tag:存放视频相关数据

  • Audio Tag:存放音频相关数据

  • Script Tag:存放音视频元数据

3.2 MP4

MP4是一种Box封装的格式,它和FLV有着根本的不同,所以FLV可以用作直播,但是MP4却不能。

  • MP4文件由多个Box组成,每个Box存储不同的信息,而且Box之间是树状的结构。

  • Box种类很多,主要有三种:

    • ftyp:File Type Box,描述文件遵从的MP4规范与版本

    • moov:Movie Box,媒体的metadata信息

    • mdat:实际的媒体数据,可能有多个

  • moov可以位于文件头部,也可以位于文件尾部,必须要先解析moov,才能播放这个视频,如果moov在文件尾部,那就无法顺序播放了。moov有两个重要的box:

    • mvhd:Movie Header Box,mp4文件的整体信息,比如创建时间、文件时长等;

    • trak:Track Box,一个mp4可以包含一个或多个轨道(比如视频轨道、音频轨道),轨道相关的信息就在trak里。trak是container box,至少包含两个box,tkhd、mdia;

  • mvhd针对整个影片,tkhd针对单个track,mdhd针对媒体,vmhd针对视频,smhd针对音频,可以认为是从 宽泛 > 具体,前者一般是从后者推导出来的。

3.3 FLV可以seek吗?

FLV用作直播的时候,肯定是无法seek,但是用作点播时,它的keyframes中包含“filepositions”和“times”,分别指关键帧的文件位置和关键帧的PTS,通过keyframes可以建立自己的index,在seek过程中,可以快速地跳到你想要的关键帧的位置进行处理。

4.PCM和AAC知识点

PCM是Pulse Code Modulation 脉冲编码调制,是非压缩的音频编码,就是原始的音频数据。 但是PCM只是原始数据,我们播放原始数据的时候,不知道当前音频的声道、采样率等信息,不知道这些信息,是无法有效播放音频的。 AAC将PCM音频数据编码压缩,并在头部添加了采样率、采样大小、声道

作者:安纯旦

链接:音视频面试涨知识(二) - 掘金 

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

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

相关文章

EasyPytest测试平台开发日志之系统设计

EasyPytest测试平台,帮你高效管理Pytest测试用例。 EP平台的定位是Pytest测试用例管理平台,80%的自动化用例开发在PyCharm等专业的IDE中进行,20%的用例调度和结果查看就交给EP平台来管理。 EP平台是对teprunner测试平台的一次全新升级&#x…

【设计模式】 工厂模式 (三)

文章目录4.2 工厂模式4.2.1 概述4.2.2 简单工厂模式4.2.2.1 结构4.2.2.2 实现4.2.2.4 优缺点4.2.2.3 扩展4.2.3 工厂方法模式4.2.3.1 概念4.2.3.2 结构4.2.3.3 实现4.2.3.4 优缺点4.2.4 抽象工厂模式4.2.4.1 概念4.2.4.2 结构4.2.4.2 实现4.2.4.3 优缺点4.2.4.4 使用场景4.2.5 …

【电脑使用】硬盘无法引导进入系统,无法退出BIOS

前言 因为想要给自己的笔记本添置装备,于是想着把老电脑上的固态拆下来,但是考虑到老电脑虽然不常用,但还是偶尔会用,不能是瘫痪状态,于是想把我之前淘到的一个机械硬盘换上去,结果发现无法引导进入系统&am…

【JavaEE】HTTP(Part1 含面试题)

努力经营当下,直至未来明朗! 文章目录前言一、HTTP协议抓包工具协议总格式(重要!!)二、HTTP协议中的细节【HTTP请求】【HTTP中的“方法”】【GET】:最常用的HTTP请求【POST】【认识请求“报头”…

SecureBridge Alexandria Release 2和iOS 15的支持

SecureBridge Alexandria Release 2和iOS 15的支持 添加了对Embarcadero RAD Studio 11 Alexandria Release 2的支持。 增加了对Apple iOS模拟器ARM 64位目标平台的支持。 增加了对Lazarus 2.2.2的支持。 添加了对Apple iOS 15的支持。 增加了对Android 12的支持。 SSH、SFTP、…

ubuntu 安装 colmap

目录 一、安装colmap 二、报错解决 三、安装成功 四、colmap使用教程 一、安装colmap 参考安装:​​​​​​​chttps://blog.csdn.net/weixin_46132232/article/details/124211233 官方:COLMAP 官方information 二、报错解决 2.1 在安装colmap的…

HashMap源码解析

HashMap源码解析 基础入门 什么是哈希 核心理论:Hash 也称散列、哈希,对应的英文都是 Hash。基本原理就是把任意长度的输入,通过Hash算法变为固定长度输出。 这个映射的规则就是对应的 Hash 算法,而原始数据映射后的二进制串就…

飞桨VisualDL本地运行问题

最近参加了百度飞桨的基于深度学习的自然语言处理 免费AI课程,有一道作业题是要利用飞桨提供的可视化工具VisualDL查看词向量降维效果。由于安全方面的原因,AI Studio中的可视化服务无法使用了。当按照作业步骤,生成日志文件后: 添…

Vue3+Element-ul学生管理系统(项目实战)

Vue3Element-ul学生管理系统(项目实战) 要发奋做一个可爱的人。不埋怨谁,不嘲笑谁,也不羡慕谁,阳光下灿烂,风雨中奔跑,做自我的梦,走自我的路! 看本项目的前提自己学过Vue2Vue3Elementui组件库 …

Python学习笔记-操作数据库

记述python中关于数据库的基本操作。 一、数据库编程接口 1.连接对象 数据库连接对象(Connection Object)提供获取数据库游标对象、回滚事物的方法,以及连接、关闭数据库连接。 1.1 获取连接对象 使用connect()方法获得连接对象&#xf…

STM32F4 | 定时器中断实验

文章目录一、STM32F429 通用定时器简介二、硬件设计三、软件设计四、实验现象五、STM32CubeMX 配置定时器更新中断功能这一章介绍如何使用 STM32F429 的通用定时器, STM32F429 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 …

从外包到拿下阿里 offer,这 2 年 5 个月 13 天到底发生了什么?

开篇介绍 个人背景: 不说太多废话,但起码要让你先对我有一个基本的了解。本人毕业于浙江某二本院校,算是科班出身,毕业后就进了一家外包公司做开发,当然不是阿里的外包,具体什么公司就不透露了&#xff0…

机器学习100天(一):001 开发环境搭建

机器学习实战需要编写代码,选择一个好的 IDE 能大大提高我们的开发效率。基于 Python 的广泛使用,我们给大家介绍当前最流行的机器学习开发工具包:Anaconda。 一、为什么选择 Anaconda 我们知道 Python 是人工智能的首选语言。为了更好、更方便地使用 Python 来编写机器学…

Linux||后续1:Ubuntu20.04安装MySQL8.0纯命令图文教程(安装+排错+可视化工具+常用命令)

我是碎碎念:) 之前写过一篇用Ubuntu20.04安装MySQL的教程,指路如下 Linux||Ubuntu20.04安装MySQL详细图文教程_Inochigohan的博客-CSDN博客 但方法不是用Linux命令安装的,感觉用着不太顺手😜 索性就重装一遍,纯当是温故而知新好啦…

为什么我们越来越反感「消息通知」?

在日常生活中,我们可以接触到很多「消息通知」: ● 响起门铃声意味着门外有人来访; ● 开车时,仪表盘上显示的发动机温度、行车速度等信息,辅助我们随时了解汽车情况; ● 每当手机电量低于20%时&#xf…

C++ 银行家算法与时间片轮转调度算法结合

一.实验目的 (1) 掌握 RR(时间片调度) 算法,了解 RR 进程调度 (2) 了解死锁概念,理解安全状态,并且理解银行家算法 (3) 利用 RR 进程调度与银行家算法结合,写出一个简单的项目 二.实验原理 2.1 时间片调度算法 在分时系统中都…

SpringBoot整合WebSocket实现简易聊天室

文章目录什么是WebSocket ?WebSocket通信模型为什么需要WebSocketWebsocket与http的关系SpringBoot集成WebSocket什么是WebSocket ? WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动…

Opencv(C++)笔记--腐蚀与膨胀操作、创建滑动条

目录 1--膨胀操作 2--腐蚀操作 3--腐蚀和膨胀的作用 4--创建滑动条 5--实例代码 1--膨胀操作 ① 原理: 将图像(原图像的一部分 A )与核矩阵(结构元素 B )进行运算,将结构元素 B 覆盖图像 A&#xff0…

[附源码]Nodejs计算机毕业设计基于的数字图书馆系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

离散被解释变量

一、二值选择模型 采用probit或者logit模型 logit y x1 x2 ,nolog r vce(cluster clustervar) ornolog表示不用显示迭代过程vce(cluster cluster)表示运用聚类标准误,由于二值选择模型一般采用稳健标准误的意义不大,所以常常使用聚类标准误。or 表示结…