人间观察

这个社会很浮躁,千万不要考验人性

在视频中的数据保存和传输都是YUV数据格式。主要是为了降低数据大小,如果用argb格式的数据,1px可能需要4个字节,而用YUV可能就需要1.5个字节。

YUV简介

与RGB类似,YUV也是一种颜色编码方法,主要用于视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,比如这样的设计解决了彩色电视机与黑白电视的兼容问题。

YUV,分为三个分量,“Y”表示的是明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是用于指定像素的颜色。

UV 即CbCr(C代表颜色,b代表蓝色,r代表红色)

分类

YUV格式有两大类:平面(planar)和紧凑(packed)。

对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是存储所有像素点的V,或者是先v后u

对于packed的YUV格式,每个像素点的Y,U,V是连续交替存储的。比如YUV420P 其中的P表示“紧凑”,YUV420SP 其中的SP表示“半紧凑”。

采样

主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0

YUV 4:4:4采样,每一个Y对应一组UV分量,一个YUV占8+8+8 = 24bits 3个字节。

YUV 4:2:2采样,每两个Y共用一组UV分量,一个YUV占8+4+4 = 16bits 2个字节。

YUV 4:2:0采样,每四个Y共用一组UV分量,一个YUV占8+2+2 = 12bits 1.5个字节。

最常见的YUV420P和YUV420SP都是基于4:2:0采样的,所以如果图片的宽为width,高为heigth,在内存中占的空间为width * height * 3 / 2,其中前width * height的空间存放Y分量,接着width * height / 4存放U分量,最后width * height / 4存放V分量。

YUV格式

常见的YUV格式有YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420等,Android中比较常见是YUV420分为两种:YUV420PYUV420SP。所以就先了解下YUV420PYUV420SP.

YUV420P

YUV420P是平面模式,Y , U , V分别在不同平面,也就是有三个平面,它是YUV标准格式4:2:0

为了更方便的看如下表示:

为了说明存储方式,每一组用不同的颜色表示。每一种颜色是一组,每四个Y共用一组UV分量,比如Y1 Y2 Y7 Y8 U1V1 Y3 Y4 Y8 Y10 U2V2

那么真实的在字节流中就是按照行从左到右一行一行的拼起来的:

YUV420P分为:YU12和YV12

YU12格式

在Android中也叫作I420格式,首先是所有Y值,然后是所有U值,最后是所有V值。比如6x6的图片,内存大小就是6x6x3/2=54个字节。为了更清晰的查看,我们换行看,真实的是一行byte[]数据流。

YYYYYY
YYYYYY
YYYYYY
YYYYYY
UUUUUU
VVVVVV

YV12格式

YV12格式与YU12基本相同,首先是所有Y值,然后是所有V值,最后是所有U值。比如6x6的图片,内存大小就是6x6x3/2=54个字节

YYYYYY
YYYYYY
YYYYYY
YYYYYY
VVVVVV
UUUUUU

YUV420SP

YUV420SP 也是是平面模式。分为NV21和NV12两种格式。Y是一个平面,UV是一个平面,UV/VU为交替存储,而不是分为三个平面。

在Android Camera中文档中强烈推荐使用NV21YV12,因为这两种格式支持所有的相机设备。Camera默认输出YUV的数据格式为NV21。但是在Camera2中,推荐使用的格式则是YUV_420_888

ImageFormat.NV21 注释

YCrCb format used for images, which uses the NV21 encoding format.
This is the default format for android.hardware.Camera preview images, when not otherwise set with android.hardware.Camera.Parameters.setPreviewFormat(int).
For the android.hardware.camera2 API, the YUV_420_888 format is recommended for YUV output instead.

Camera.Parameters预览参数设置setPreviewFormat 注释

Sets the image format for preview pictures.
If this is never called, the default format will be ImageFormat.NV21, which uses the NV21 encoding format.
Use getSupportedPreviewFormats to get a list of the available preview formats.
It is strongly recommended that either ImageFormat.NV21 or ImageFormat.YV12 is used, since they are supported by all camera devices.

为了更方便的看如下表示,真实的在字节流中就是按照行从左到右一行一行的拼起来的。

NV21格式

在Android Camera中手机从摄像头采集的预览数据默认值是NV21。

NV21存储顺序是先存Y值,再VU交替存储:YYYYVUVUVU,比如6x6的图片,内存大小就是6x6x3/2=54个字节

YYYYYY
YYYYYY
YYYYYY
YYYYYY
VUVUVU
VUVUVU

NV12格式

NV12存储顺序是先存Y值,再UV交替存储:YYYYUVUVUV,比如6x6的图片,内存大小就是6x6x3/2=54个字节

YYYYYY
YYYYYY
YYYYYY
YYYYYY
UVUVUV
UVUVUV

这里先熟悉下Android中常见的YUV420PYUV420SP。一般我们在使用yuv数据的时候,会对yuv数据进行变换,比如:摄像头数据旋转,从一种格式转为另一种数据等。

Android音视频【六】视频数据存储方式YUV相关推荐

  1. Android中的5种数据存储方式

    Android中的5种数据存储方式 Android中的5种数据存储方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPref ...

  2. 深入剖析Android中最简单的数据存储方式:SharedPreferences

    目录 一. 使用SharedPreferences存储数据 二. 数据的存储位置和格式 三.存储数据的获取 四. 存取复杂类型的数据 五. 设置数据文件的访问权限 Hello,你好呀,我是灰小猿,一个 ...

  3. android 存储方式简书,Android的多种数据存储方式

    1. 简介 作为一个完整的应用程序,数据存储操作是必不可少的.现在Android的离线缓存就是通过网络良好状态时将从服务器收到的数据保存到本地.Android系统中主要提供了3种方式进行数据存储,分别 ...

  4. android常用的存储方式,Android 常见数据存储方式

    Android 常见数据存储方式有以下三种:1.使用SharedPreferences存储数据:其本质就是一个xml文件,可以保存字符串.布尔值.基础数据.集合等数据.常用于存储较简单的参数设置. 2 ...

  5. Android的5种数据存储方式概述

    Android有5种数据存储方式,具体分类如下: 1.应用内数据存储方式,程序外不可访问:SharedPreferences存储 应用场景:存储应用配置信息和常用信息. 获取SharedPrefere ...

  6. Android的5中主要的数据存储方式

    Android有5中主要的数据存储方式: 1.Android本身的数据库(SQLite数据库):SQlite是一个轻量级的.跨平台的数据库.占用内存小,支持基本的SQL语法,通常用于存储用户信息. 2 ...

  7. Android的数据存储方式,如数据库的基本操作和三级缓存实现--

    ------------------------------数据存储方式----------------------------- 1 使用SharedPreferences存储数据: void Re ...

  8. 《iOS取证实战:调查、分析与移动安全》一3.4 数据存储方式

    3.4 数据存储方式 iPhone上的数据以很多方式进行存储.下面的小节涵盖了每一个数据存储的形式以供审查者了解潜在的证据如何定位或恢复. 内部存储: SQLite 数据库文件: 属性列表: 网络: ...

  9. 【android】音乐播放器之数据存储总结

    学习Android有一个多月,看完了<第一行代码>以及mars老师的第一期视频通过音乐播放器小项目加深对知识点的理解.从本文开始,将详细的介绍简单仿多米音乐播放器的实现,以及网络解析数据获 ...

最新文章

  1. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天做个demo(续集)...
  2. java 不包含 字母和数字_Java String - 查看字符串是否仅包含数字而不包含字母
  3. vc6.0 获取ip(一)
  4. python基础(二)字符串內建函数详解
  5. 【caffe】找不到gpu/mxGPUArray.h
  6. 怎么查看WordPress主题HTML,几个WordPress 主题在线检测工具
  7. java a%2==0_Java 初始化a=2 打印a+++a++为5
  8. 服务器系统 比较,各种服务器操作系统比较
  9. mysql_数据查询_单表查询
  10. 机器学习实战之路—— 1 线性回归 (二)
  11. 开源接口测试平台BTest
  12. 编写jQuery插件的方法
  13. 赵征出任尚德机构独立董事 替代俞敏洪席位
  14. 荣耀变局之下,国产智能手机九年往事
  15. 哀悼日网页变灰的方法
  16. Discuz小鱼游戏风影传说商业GBK+UTF8版模板/DZ游戏网站模板
  17. 北美电影票房Top10-2020年1月10日:《1917》扬眉吐气
  18. python蜂窝状六边形_CSS-蜂窝状展示区域(多个六边形)的一种实现方式
  19. 摩拜联手高通中移动 剑指最大物联平台步子太大?
  20. 资产定价Model——随机变量因子

热门文章

  1. 51NOD 1185 威佐夫游戏 V2(威佐夫博弈)
  2. 【STM32 .Net MF开发板学习-03】TinyGUI绘图示例
  3. 在Linux中如何使用gdb调试C程序
  4. ym——物联网入口之中的一个Android蓝牙4.0
  5. mfc--使用ShellExecute打开另一个可执行程序
  6. jBPM4.4之流程引擎对象ProcessEngine
  7. Linux App Summit(LAS)社区 KDE Gnome
  8. sklearn分类、回归器总结
  9. css清除浮动的几种方法_清除浮动的几种方法
  10. Javascript第五章innerHTML/innerText/创建新节点元素添加内容第八课