更多音视频知识请关注公众号:进击的代码家
音视频学习项目:LearnVideo AndroidMediaCodecDemo

视频基础概念

像素

**像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。**在下面这张图中,你可以看到一个个方块,这些方块就是像素。

分辨率

图像(或视频)的分辨率是指图像的大小或尺寸。我们一般用像素个数来表示图像的尺寸。比如说一张1920x1080的图像,前者1920指的是该图像的宽度方向上有1920个像素点,而后者1080指的是图像的高 度方向上有1080个像素点。

Stride

Stride也可以称之为跨距,指的是图像存储时内存中每行像素所占用的 空间。跨距为了能够快速读取一行像素,我们一般会对内存中的图像实现内存对齐,比如16字节对齐。

举个例子,我们现在有一张RGB图像,分辨率是1278x720。我们将它存储在内存当中,一行像素需要 1278x3 = 3834个字节,3834除以16无法整除。因此,没有16字节对齐。所以如果需要对齐的话,我们需 要在3834个字节后面填充6个字节,也就是3840个字节做16字节对齐,这样这幅图像的Stride就是3840 了。如下图所示:

也就是说,每读取一行数据时候需要跳过这多余的6个字节

RGB

一般来说,我们看到的彩色图像中,都有三个通道,这三个通道就是R、G、B通道,(有的时候还会有Alpha值,代表透明度)
通常R、G、B各占8个位,我们称这种图像是8bit图像。

YUV

对于图像显示器来说,它是通过RGB模型来显示图像的。而在传输图像数据时是使用YUV模型的,因为YUV模型可以节省带宽。所以就需要采集图像时将RGB模型转换到YUV模型,显示时再将YUV模型转换为RGB模型。

从视频采集与处理的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264、MPEG视频编解码)的角度来说,也是在原始YUV码流进行编码和解析 ;如果采集的资源时RGB的,也需要转换成YUV。

使用YUV而非RGB的两个原因:
1)yuv提取y亮度信号,可以直接给黑白电视使用,兼容黑白电视
2)人对uv的敏感性小于亮度,这样我们适当减少uv的量,进行视频的压缩。所以才会有420 422 444等不同的yuv描述

YUV 颜色编码采用的是 明亮度 和 色度 来指定像素的颜色。
其中,Y 表示明亮度(Luminance、Luma),而 U 和 V 表示色度(Chrominance、Chroma)。
YUV主要分为YUV 4:4:4,YUV 4:2:2,YUV 4:2:0几种常用类型。

YUV格式有两大类:planar和packed。对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。对于packed的YUV格式,每个像素点的Y,U,V是连续交叉存储的。




1.YUV 4:4:4, 每一个Y对应一组UV。
2.YUV 4:2:2,每两个Y共用一组UV。
3.YUV 4:2:0,每四个Y共用一组UV。

YUV 4:4:4采样
意味着Y、U、V三个分量的采样比例相同,所以在生成的图像里,每个像素的三个分量信息都是8bit。

举个例子 :
假如图像像素为:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
那么采样的码流为:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
最后映射出的像素点依旧为 [Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]

这种采样方式的图像和 RGB 颜色模型的图像大小是一样,并没有达到节省带宽的目的

YUV 4:2:2采样
UV分量是Y分量的一般,Y分量和UV分量按照2:1的比例采样,如果水平方向有10个像素点,那么采样了10个Y分量,就只采样了5个UV分量。

举个例子 :
假如图像像素为:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
那么采样的码流为:Y0 U0 Y1 V1 Y2 U2 Y3 V3
其中,每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个。
最后映射出的像素点为 [Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]

通过这个例子就可以发现第一个像素点和第二个像素点共用了[U0、V1]分量,第三个像素点和第四个像素点共用了[U2、V3]分量,这样就节省了图像空间。比如一张1280*720大小的图片,如果按照RGB方式存储,会耗费:

(1280∗720∗8+1280∗720∗8+1280∗720∗8)、8/1024/1024=2.637

音视频开发基础知识(2)——最通俗易懂的视频编解码理论知识相关推荐

  1. 即时通讯音视频开发(六):如何开始音频编解码技术的学习

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的. 系列文 ...

  2. 音视频开发 视频编解码理论知识

    像素 像素是图像的基本单元,一个个像素就组成了图像.你可以认为像素就是图像中的一个点.在下面这张图中,你可以看到一个个方块,这些方块就是像素. 分辨率 图像(或视频)的分辨率是指图像的大小或尺寸.我们 ...

  3. 音视频开发基础(2):数字视频技术简介

    数字视频技术是指以数字形式捕捉.记录.处理.存储.传输.复现动态彩像的一系列相关技术.例如通过数字摄像机直接产生数字视频信号,压缩成MPEG-2格式存储在视频数据库.在被检索到后通过因特网传输到远端的 ...

  4. 音视频开发基础知识到进阶剖析

    全网最强音视频开发教学--音视频开发基础知识到进阶剖析 1.要掌握多深的原理才能开始做项目 2.音视频基础有哪些必须掌握的 3.进阶需要学习什么项目 视频讲解如下,点击观看: 全网最强音视频开发--音 ...

  5. 音视频开发基础知识(转载)

    音视频入门前,需要了解下一些基础概念,不必死记硬背,可之后再补再翻阅. 一. 颜色模式 RGB RGB颜色模型的主要目的是在电子系统中检测,表示和显示图像,比如电视和计算机,但是在传统摄影中也有应用. ...

  6. 音视频开发(19)---Android视频开发基础(一)

    Android视频开发基础(一) 版权声明:本文为[viclee]原创,如需转载请注明出处~ https://blog.csdn.net/goodlixueyong/article/details/6 ...

  7. Android音视频开发基础(七):视频采集-系统API基础

    前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了<Android 音视频从入门到提高 - 任务列表>.本文是Android音视 ...

  8. Android音视频开发基础(六):学习MediaCodec API,完成视频H.264的解码

    前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了<Android 音视频从入门到提高 - 任务列表>.本文是Android音视 ...

  9. Android视频开发基础

    Android视频开发基础 版权声明:本文为[viclee]原创,如需转载请注明出处~ https://blog.csdn.net/goodlixueyong/article/details/6205 ...

最新文章

  1. 视频编辑SDK---我们只提供API,任你自由设计炫酷的功能
  2. 第二章 向量(d5)有序向量:插值查找
  3. SQL——一种简单的基于角色控制的权限管理数据库设计DEMO
  4. 矩阵可逆的一种刻画方式
  5. OpenCV imwrite
  6. 35岁的程序员,真的要转管理吗?
  7. altera fpga sdi输出方案_高段位攻城狮是这样解决SI分析、DDR、FPGA国产化问题的! | 电巢直播答疑汇总...
  8. Android studio 设置函数功能悬浮提示(鼠标放到上班提示参数和功能)
  9. 金蝶服务器出纳系统无法启动,金蝶KIS专业版启用出纳系统时提示银行账号或银行名称不能为空...
  10. java+整合handwrite_Java
  11. WCDMA物理层--信道整体结构流程
  12. 车载娱乐系统开发术语记录
  13. 一纸学习康奈尔笔记法
  14. LR之录制脚本修改完善
  15. cad调了比例因子没反应_CAD入门学习之如何修改比例因子
  16. 第十三届蓝桥杯Java-C组2022年考题个人解析
  17. 《Python机器学习——预测分析核心算法》——2.5 用实数值属性预测实数值目标:评估红酒口感...
  18. (附源码)小程序 美食教程小程序 毕业设计 190900
  19. 计算机专业该如何学习:大一篇
  20. pytorch加载自己的数据集,数据集载入-视频合集

热门文章

  1. html和htlm5写法,ecshop简约模板 新dossy模板 ecshop htlm5和css3 自适应手机微信
  2. Android下WebView的图片适配加载与文字自动换行处理
  3. 我是这么安装使用.net 5框架的
  4. 正则表达式中圆括号的作用
  5. C++中 sort() 的使用
  6. ps画笔圈大小快速调节 增加选区减少选区交叉选区快捷键
  7. UE4拿到了一个老工程如何操作进行打开:在Epic里面打开
  8. 一.查找和排序算法的python实现
  9. SCSS从入门到实战(学习笔记)
  10. 实现多级缓存的架构设计方案