音视频

音视频

视频的概念

视频其实就是一系列图片的集合,当在一秒内连续展示不小于24张图片时,人眼就会认为是连续的,所以出现了视频效果,这个1秒24张就是帧率,帧率越高,所需要的图片越多,也就越流畅。根据图片内存算法,可知这样的视频体积必然会很大,就延伸出了视频的编码(压缩),解码(解压缩)技术,Codec:编解器

压缩

去冗余法:将一段连续的相似的图片只取不同的部分保存

容器文件

容器文件是经过codec编码(压缩)后按照一定结构存储图片,音频等信息的文件。MP4,rmvb等,容器文件里有多个轨道,每个轨道持有不同的音视频信息。容器文件最重要的是MetaData,包含了一个索引表,索引表里记录的是各个轨道的起始位置及大小,每个轨道又持有一个索引表,里面记录着当前轨道各个音视频部分的起始位置及大小。播放器就是解析这些索引表找到需要播放的内容。总结:容器文件有个索引表,记录各个轨道的信息,轨道也有个索引表,记录轨道中各部分的位置,播放器通过索引表查找需要播放的内容

播放器播放流程

播放器有三个构成:
加载控制器,渲染器,读取器。加载控制器负责容器文件的加载方式(本地还是网络),渲染器将数据渲染在屏幕上,读取器负责读取数据。

播放器播放容器文件时会将头文件加载进内存并构造三个表,时间(微妙为单位)与采样索引(可以理解为视频片段开始的地方)的对应表,采样索引与容器文件数据位置(byte为单位)的对应,采样索引与数据大小的对应。例如我要播放第多少微妙的视频,播放器根据时间找到采样索引,再根据采样索引找到容器文件中的位置,找到对应片段的大小,将这段数据读取出来给渲染器进行展示(并不是读取出来就立即展示,播放器会有一个缓存区,将读取的数据放到缓存区中,当缓存区里内容大小达到播放器定义可展示大小时才会进行展示)

在线视频播放技术

由来:在线视频播放不能将整个容器文件下载下来再进行解析,所以需要分段下载,将一个视频分成许多个片段进行下载,由服务器提供支持(RANGE)

Android Codec

Android提供的Codec最重要的部分就是读取器(MediaExtractor)和编解器(MediaCodec)

MediaExtractor提供了轨道信息的获取,以及轨道数据的读取等

MediaCodec在创建时会维护两个队列,一个InputQueue,一个OutputQueue,显而易见InputQueue为Codec提供数据,这数据是从读取器里获取到的数据,OutputQueue向渲染器提供经过Codec解码过后的数据,再经特定的展示控件显示视频

整个视频播放的流程就是MediaExtractor源源不断的读取指定轨道的数据放入InputQueue中,然后从OutputQueue中取出数据给特定控件进行展示

自适应视频播放技术

自适应主要是根据网络状况播放器自主选择不同的清晰度(清晰度越高意味着图片质量越高,数据越大,对网速要求更大)视频数据源,需要前端和后端都提供支持,后端提供一个不同清晰度数据源的表(mpd文件),前端根据当前网络状况去这个表中找对应的数据源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值