一 、音视频相关的术语介绍

1.1 帧率 fps (Frame Per Second)

是以帧称为单位的位图图像连续出现在显示器上的频率(速率)
视频每秒传输的帧数(画面数),每秒帧数越多,显示的画面就越流畅,但对显卡(GPU)的要求也越高。一般来说,30fps就是可以接受的,如果将性能提升到60fps则可以明显提升交互感和逼真感,但是超过75fps就不容易被察觉有明显的流畅度提升了。如果帧率超过屏幕刷新率,则只会浪费图像处理能力,因为监视器不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了。

1.2 分辨率:

  • 视频分辨率是指视频成像产品所形成的图像大小或尺寸。
  • 手机分辨率
    QVGA QVGA就是Quarter VGA的简称,意思是VGA分辨率的四分之一,这是智能机流行前最为常见的手机屏幕分辨率,竖向的就是240×320像素,横向的就是320×240像素。
    HVGA HVGA代表的意思是Half-size VGA,意思是VGA分辨率的一半,为480×320像素,宽高比为3:2。 这种分辨率的屏幕大多用于PDA
    WVGA WVGA的全称想必大家很容易就能想到了,那就是 Wide VGA,分辨率分为854×480像素和800×480像素两种。
  • 电视分辨率
    720P=1280720=【1680】【980】=169
    2K电视,即1080P=19201080=【16120】【9120】=16
    9
    4K电视,即2160P=38402160=【16240】【9240】=169
    8K电视,即4320P=76804320=【16480】【9480】=16
    9

1.3 刷新率

刷新率是指屏幕每秒画面被刷新的次数,刷新率分为垂直刷新率和水平刷新率,一般提到的刷新率通常指垂直刷新率。垂直刷新率表示屏幕上图片每秒重绘多少次,也就是每秒屏幕刷新的次数,以Hz(赫兹)为单位。刷新率越高,图像就越稳定,图像显示就越自然清晰,对眼睛的影响也越小。刷新率越低,图像闪烁和抖动得就越厉害,眼睛疲劳的就越快。一般来说,如果能达到80Hz以上的刷新率,就可以完全消除图像闪烁和抖动感,眼睛也不太容易疲劳。

1.4 编码格式

编码的目的是压缩数据量,采用编码算法压缩冗余数据。常用的编码格式有如下这两种:

  • MPEG(MPEG-2、MPEG-4)
  • H.26X(H.263、H.264/AVC、H.265/HEVC)

1.5 码率(比特率) bps (Bit Per Second)

视频码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。通俗一点的理解就是取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件。
码率越高,每秒传送数据就越多,画质就越清晰,视频文件占用空间也越大

文件大小(b) = 码率(b/s)*时长(s)

1.6 DTS和PTS

  • DTS全称Decode Time Stamp,主要用于标示读入内存中的比特流在什么时候开始送入编码器中进行解码。
  • PTS全程Presentation Time Stamp,主要用于度量解码后的视频帧什么时候被显示出来。

1.7 YUV和RGB

  • YUV是被欧洲电视系统所采用的一种颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的颜色空间模型。其中Y、U、V几个字母不是英文单词的首字母,Y代表亮度,UV代表色差,U和V是构成颜色的两个分量。
  • RGB是一种颜色空间模型,通过对红®绿(G)蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色,RGB即代表红,绿,蓝三个通道的颜色。

1.8 视频帧

常见的视频帧有I、P、B帧等:

  • I帧表示关键帧,我们可以理解为这一帧画面的完整保留,解码时只需要本帧数据就可以完成,因为其包含完整画面。
  • P帧表示的是这一帧和之前的一个关键帧(P帧)的差别,解码的时候需要用之前缓存的画面叠加上本帧定义的差别生成最终画面。P帧其实也可以称为差别帧,P帧没有完成的画面数据,只有与前一帧画面的差别数据。
  • B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面数据与本帧数据的叠加取得最终的画面。b帧压缩率高,但是解码的时候CPU会比较吃力。

1.9 音频帧

音频帧的概念没有视频帧那么清晰,几乎所有视频编码格式都可以简单的认为1帧就是编码后的一副画面。但是音频帧跟编码格式相关,它是各个编码标准自己实现的。

  • 对PCM(未经编码的音频数据)来说,它根本就不需要帧的概念,根据采样率和采样精度就可以播放。比如采样率为44.1kHz,采样精度为16位的音频,可以算出比特率是4410016kb/s,每秒的音频数据是固定的4410016/8字节。
  • AMR帧比较简单,它规定每20ms的音频是1帧,每1帧音频都是独立的,有可能采用不同的编码算法以及不同的编码参数
  • MP3帧较复杂一些,包含了更多的信息,比如采样率、比特率等各种参数。具体如下:音频数据帧个数由文件大小和帧长决定,每一帧的长度可能不固定,也可能固定,由比特率决定,每一帧又分为帧头和数据实体两部分,帧头记录了MP3的比特率、采样率、版本等信息,每一帧之间相互独立。

1.9 量化精度

量化精度表示可以将模拟信号分为多少个等级,量化精度越高,音乐的声压振幅越接近原音乐。量化精度的单位是bit(比特),CD标准的量化精度是16bit,DVD标准的量化精度是24bit。也可以理解为一个采样点用多少bit表示(8/16/24/23bit)。

1.10 采样率

采样率指每秒音频采样点个数(8000/44100Hz),采样率单位用Hz(赫兹)表示。

1.11 声道

声道(Sound Channel)是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。
常见声道有单声道、立体声道、4声道、5.1声道、7.1声道等-

二、图像编码原理

1.1 视频文件是什么

视频文件格式是指视频保存的一种格式,各种不同后缀的视频文件,其实就是使用各种不同的数据格式来封装视频的容器。
![视频文件是什么

1.2 为什么要进行图像编码

视频是连续的图像序列,由连续的帧构成,一帧即为一幅图像,由于人眼的视觉暂留效应,当帧序列以一定的速度播放时,我们看到的就是动作连续的视频。
这么多连续的图像格式如果不经过编码,数据量就会非常大。比如一个A.rgb文件可能有100Mb,转化为A.h264则可能只有500kb大小。 编码的目的,其实是为了压缩,各种视频编码方式,都是为了让视频体积变大更小,有利于存储和传输。编码的核心思想就是去除冗余信息。

  • 空间冗余:图像内部相邻像素之间存在较强的相关性造成的冗余
  • 时间冗余:视频图像序列中的不同帧之间的相关性所造成的冗余
  • 视觉冗余:是指人眼不能感知活不敏感的那部分图像信息
  • 信息熵冗余:人们用于表达某一信息所需要的比特数总比理论上表示该信息所需的最少比特数要大,他们之间的差距就是信息熵冗余,也称编码冗余,
  • 知识冗余:是指在有些图像中还包含与某些验证知识有关的信息

1.3 如何进行编码(IPB帧)

  • I帧:帧内编码帧,也叫关键帧,I帧可以看做是一个图像经过压缩之后的产物,可以单独解码出一个完整的图像。
  • P帧:前向预测编码帧,记录了本帧和之前的一个关键帧(或P帧)的差别,解码时需要用到之前缓存的画面叠加上本帧定义的差别,生成最终画面。
  • B帧:双向预测编码帧,记录了本帧和前后帧的差别,解码时既需要参考前面一个I帧(P帧),同时也需要后面的P帧才能生成一张完整的图像

三、视频编码

2.1 常见的视频编码类型

所谓视频编码就是指通过特定的压缩技术,将某个视频格式文件转化为另外一种视频格式文件的方式,视频传输中最重要的编码标准有国际电联(ITU-T国际电子联盟)的H261、H263、H264等。 运动静止图像专家组(有ISO国际标准化组织与IEC国际电子委员会与1988年联合成立)的MPEG系列标准MPEG1、MPEG2、MPEG4 AVC等。

其中ITU-T H.264/MPEG-4 AVC是ITU-T与ISO/IEC联手合作指定的新标准,ITU-T方面称之为H.264。但ISO/IEC的则将这个新标准归纳为MPEG系列,称为MPEG-4 AVC。

而H.265则被视为是ITU-T H.264/MPEG-4 AVC标准的继任者,又称为高效率视频编码(High EFFiciency Video Coding,简称HEVC)

2.2 H264码流分析

H264码流文件分两层。

  • 1、VCL(Video Coding Layer,视频编码层):负责高效的视频内容表示,VCL数据既编码处理的输出,它表示被压缩编码后的视频数据序列
  • 2、NAL(Network Abstraction Layer,网络提取层):负责以网络所要求的恰当的方式对数据进行打包和传输,是传输层。 不管在本地播放还是网络播放,都要通过这层来传输。

2.3 片和宏块

一帧图片经过H.264编码之后,就被编码为一个或多个片(slice),每片包含整个宏块(至少一个宏块,最多包含整个图片宏块),NAL单元就是装载着这些片(slice)的载体。

2.4 Annexb格式

一般H.264编码器的默认输出为:起始码+NALU(NAL单元)。起始码为:0x00000001或者0x000001。 每个NALU包含1个字节的NAL Header与若干整数节的负荷数据EBSP构成。

| NAL Header | EBSP |NAL Header | EBSP |

其中NAL Header只占用1个字节,次字节低5位表示NALU类型

四、视频采集编码格式

3.1 RGB颜色编码

红(Red)绿(Green)蓝(Blue),光的三原色

3.2 YUV颜色编码

YUV也是一种颜色编码方法,主要用于优化彩色视频信号的传递,常应用在各个视频处理组件中。
YUV主要用于优化彩色视频信号的传递,在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。与RGP相比,YUV只需要占用少量的频宽(RGB需要三个独立的视频信号同时传递)。 YUV是编译true-color颜色空间(color space)的种类,Y’UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠。“Y”表示明亮度(Luminance或Luma),也就是灰度(色调饱和度),“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色,如果只有Y数据,那么表示的图像就是黑白的。使用YUV格式才能极大的去除冗余数据,人眼对亮点信息更敏感,对色度敏感度不高,也就是说可以压缩UV数据,而人眼难以发现。 所以压缩算法的第一步,往往先把RGB数据转化为YUV数据,对Y少压缩一点,对UV多压缩一点,以平衡图像效果和压缩率。 这也是为什么编码选择使用YUV而非RGB

Gray = R040 +G0.59+B*0.11

3.3 NV21与I420

YUV因为采样和数据排列方式的不同,又分为不同的存储格式。
一般的Android摄像头输出为:NV21类型的YUB格式,而I420类型的YUV格式则是绝大多数编解码器的默认输入输出格式。

Android音视频开发 <一> 音视频基础知识相关推荐

  1. iOS音视频开发八:视频编码,H.264 和 H.265 都支持

    我们将通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发. 这里是第八篇:iOS 视频编码 Demo. ...

  2. linux视频应用程序开发,Linux平台音视频开发和音视频SDK应用

    Linux平台音视频开发和音视频SDK应用 下面介绍一款强大的音视频即时通讯平台给大家,它就是--云智真音视频SDK. 云智真提供一套跨平台的音.视频即时通讯解决方案,基于先进的H.264视频编码标准 ...

  3. 直播软件搭建音视频开发中的视频采集

    直播软件搭建音视频开发中的视频采集 前言 在直播和短视频行业日益火热的发展形势下,音视频开发(采集.编解码.传输.播放.美颜)等技术也随之成为开发者们关注的重点,本系列文章就音视频开发过程中所运用到的 ...

  4. Android音频开发(一):音频基础知识

    一.Android音频开发(一):音频基础知识 二.Android音频开发(二):录制音频(WAV及MP3格式) 三.Android音频开发(三):使用ExoPlayer播放音频 四.Android音 ...

  5. iOS音视频开发七:视频采集

    将通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发. 这里是第七篇:iOS 视频采集 Demo.这个 ...

  6. iOS音视频开发十三:视频渲染,用 Metal 渲染

    本系列文章通过拆解采集 → 编码 → 封装 → 解封装 → 解码 → 渲染流程并实现 Demo 来向大家介绍如何在 iOS/Android 平台上手音视频开发. 这里是第十三篇:iOS 视频渲染 De ...

  7. python音视频开发_Python音视频开发:消除抖音短视频Logo的图形化工具实现

    一.引言 在<Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解>节介绍了怎么通过Python+Moviepy+OpenCV实现消除视频Logo的四种方法,并提供了详细的 ...

  8. 音视频开发—抖音GsyVideoPlayer视频底层分析使用

    theme: channing-cyan 一.初始化分析 1.初始化主要是构造了一个StandardGSYVideoPlayer 2.设置全屏布局的容器 代码如下: listVideoUtil = n ...

  9. Android视频开发进阶-关于视频的那些术语,android软件开发计算器

    原文出处:jianshu 正文 说到安卓的视频开发,大多数朋友们都是用着开源的播放器,或者安卓自带的native mediaplayer,拿来主义居多,我曾经也是...最近这半年因为开始着手重构公司的 ...

  10. Ios短视频开发初始化短视频失败或延时太长的问题原因分析

    在人们都追求快节奏的现在,手机APP打开速度都会成为购买手机时要考虑的重要问题,联通网络公司断网半个小时能引起民愤,那么移情考虑到短视频平台上来说,在视频播放方面,初始化短视频的时间当然是越短越好. ...

最新文章

  1. 全球每年仅一位!中国数学家印卧涛荣获优化领域Egon Balas奖
  2. VC字体安装相关方法总结
  3. 写代码之前应该做的几件事
  4. SAP CRM WebClient UI,点击Master Data工作中心后执行的JavaScript代码
  5. [翻译] GiFHUD
  6. 【报告分享】2020中国数字化后浪:中小企业转型与创新实录.pdf(附下载链接)...
  7. 引物设计软件primer_常用生物学软件的安装与应用(三)—Primer6
  8. 一个根据相似度的去重方法
  9. 震惊:selenium竟然不是自动化测试工具
  10. 【Python脚本进阶】2.4、conficker蠕虫(上):Metasploit攻击Windows SMB服务
  11. 苹果画画软件_想在iPad 上画画,推荐用这些软件
  12. 四月Google份额继续上升 微软收购雅虎势在必行
  13. 金立Android版本,金立amigo为国内首个安卓5.0手机操作系统
  14. asp新闻发布系统 html,构建你的网站新闻自动发布系统之一_asp实例
  15. Hadoop Streaming 实战: 实用Partitioner类KeyFieldBasedPartitioner
  16. 双曲嵌入论文与代码实现——1. 数据集介绍
  17. SFP端口是什么?有什么作用?可以接RJ45吗?
  18. [A Top-Down Approach][第一章 计算机网络和因特网]
  19. 读分布式服务框架原理与实践读后感
  20. (74)Verilog实现CRC【MIPI】

热门文章

  1. python3 reverse() reversed()
  2. c# 获取路径的盘符_C# 如何获取映射网络驱动器的共享路径 | 学步园
  3. Android12默认显示开发者选项
  4. 手把手教你制作新手引导图片
  5. 下载全球国家shp数据(公路、铁路、河流等)的网站
  6. java获取默认下载路径吗_java下载文件到浏览器默认路径
  7. 智慧园区物联网平台架构
  8. nodejs linux环境设置,tnpm安装
  9. django框架之form组件
  10. 使用Appium进行iOS的真机自动化测试