Android视频编解码 简述(1)

Android视频编解码 简述

简述

随着现在大屏幕的风潮来袭,出现了许多设备互联的需求,其中最重要的功能之一就是投屏功能,其次现在的app都离不开视频播放,这些功能的背后都少不了音视频编解码,我们这个章节就来了解一下编解码的一些知识。

首先我们先来说一下为什么需要编解码,其实主要目的就是为了减少视频的大小,试想如果我们有一个10242048分辨率的视频(手机屏幕的大小差不多这个量级),我们使用RGBA来编码,一个像素4个字节,那么一个图像就是2MB 4,就是8MB,就算一秒钟30帧,那么一秒钟视频就是240MB,一分钟就10+GB了,这个大小很夸张,而实际上我们一个1分钟的视频可能也就10M左右,这个就是因为编码大大压缩了视频的大小。

我们平时的视频播放或者投屏都是在服务端先将数据编码,然后通过信道(wifi)传输到客户端,客户端再解码显示。

编码为什么能做到这么大的压缩率呢

编码这么大的压缩率主要要依赖于视频的一些特性,一方面是单个图片可以压缩,单张图片其实有非常多的冗余信息,因为一个物体附近的颜色可能都非常相近,然后通过一些有损压缩压缩一些人眼不敏感的信息,可以将单张图片压缩到10%左右的大小(并不准确,需要依赖图片自身的特性),一张jepg图片可能就是200KB左右。

其次视频中连续的图片都有大量相似的内容,例如一个人在一个场景里走的视频,每一帧之间可能背景部分几乎是完全一样的,只有人的部分发生了位置偏移,所以可以参照一张图片,其他的图片都发送偏移信息,就是所谓的I帧。

涉及内容

本章会先介绍Android的编解码框架MediaCodec提供给app接口如何使用,会通过相机数据写一个demo。

然后会介绍一下MediaCodec的框架流程。

还有H264编码使用的一些原理。

后续可能会进一步研究软件编解码的原理,由于视频编解码的实现非常复杂,而且一般不是做编解码器的话也不需要去学习它的具体实现,对原理有一定了解即可,所以可能会把时间线放的很长~

相关推荐
骄傲的心别枯萎6 天前
项目1:FFMPEG推流器讲解(一):FFMPEG重要结构体讲解
linux·ffmpeg·音视频·视频编解码·rv1126
骄傲的心别枯萎6 天前
项目1:FFMPEG推流器讲解(二):FFMPEG输出模块初始化
linux·ffmpeg·音视频·视频编解码·rv1126
DogDaoDao9 天前
DCT与DST变换原理及其在音视频编码中的应用解析
音视频·实时音视频·视频编解码·dct变换·变换编码·dst变换
路上^_^10 天前
安卓基础组件019-引导页布局001
android·安卓
路上^_^10 天前
安卓基础组件015--textinput
安卓
路上^_^10 天前
安卓基础组件016--第三方Toasty组件
安卓
路上^_^11 天前
安卓基础组件018--第三方Image库
安卓
Everbrilliant8911 天前
音视频编解码全流程之用Extractor后Decodec
ffmpeg·视频编解码·mediacodec·音视频解码·ffmpeg编解码·decodec·ndkmediacodec
Everbrilliant8912 天前
音视频编解码全流程之用Extractor后Muxer生成MP4
视频编解码·amediamuxer·ffmpeg数据包提取·amediaextractor·ffmpeg数据包的写入·提取器extractor·复用器muxer
韩立学长13 天前
【开题答辩实录分享】以《服装定制系统的设计与实现》为例进行答辩实录分享
java·安卓