iOS数字媒体开发浅析
2016-04-26 11:28
253 查看
概述
自然界中的所有看到的听到的都是模拟信号,模拟信号是随时间连续变化,然而手机电脑等信息都属于数字媒体,它们所呈现的内容就是把自然界中这些模拟信号转换成数字信号然后再传递给我们。数字信号不是连续的是离散的,只有0与1两种状态,所以要把模拟信号转化成数字信号即把这些信息数字化这一过程称作A/D(模/数)转化,要进行这一过程就要必须对模拟信号进行采样,采样率越高数字信号越接近真正的模拟信号。当然还有D/A(数/模)转换的过程,不再本篇考虑的范围内。媒体数字化
对媒体数字化主要包括两种方式:时间采样与空间采样时间采样:捕捉信号在一段时间周期内变化,主要用于音频信号数字化。
空间采样:对一幅图片在一定分辨率之下捕捉取亮度和色度,进而创建由该图片的像素点数据所构成的数字化结果,主要用于图像信号数字化。
注:视频是一段时间内由一帧帧图像组成所以时间信号可以用这两种采样方式。
编解码压缩
通过采样得到的数字媒体文件一半都很庞大,为了方便存储和传输文件我们需要对这些文件使用压缩技术,一半我们再网上,电视上看到的视频都是经过一定程度的压缩,对数字媒体压缩后通常会大幅度缩小文件的尺寸,例如一个1920*1080帧率是30FPS的视频文件未经压缩的大小大概是178MB/s,大部分的音频与视频是通过编解码器来进行压缩的。音频
音频采样
纵轴表示振幅即音量大小,横轴表示时间,上图对一个正弦信号进行采样,每秒钟采样的次数称作采样率。采样率越高越接近真实的模拟信号。在音频数字化的过程中包含一个编码的方法,称为脉冲编解码(PCM)与线性脉冲编解码(LPCM)。
脉冲编解码(PCM)与线性脉冲编解码(LPCM)
PCM与
LPCM都是模拟信号变换为数字信号的编码方式,是对连续变化的模拟信号进行抽样、量化和编码的过程。唯一不同的是LPCM是非压缩音频数字化过程。
iOS中音频编解码器
一般的音频文件都是通过PCM音频进行再一次的编码与解码,以
mp3格式为例,在
PCM基础上进行
mp3格式编码生成
mp3格式的文件,如果把
mp3格式转换成
wma那么需要把需要这样的一个过程:mp3解码->pcm->wma编码。
iOS中的
Core Audio框架支持的音频编解码格式参考官方文档
注:
Core Audio提供对
MP3数据的解码支持,但是不支持对
MP3数据编码
在音频媒体没有使用
线性PCM编码时只能使用
ACC格式编解码。
视频
视频采样
视频数据显示是使用YCbCr色彩模式,而对视频采样就是减少
YCbCr色彩模式中的颜色数据,这个过程称为色彩二抽样。
色彩二抽样
关于YCbCr颜色模式的介绍引用百度百科:YCbCr或Y’CbCr有的时候会被写作:YCBCR或是Y’CBCR,是色彩空间的一种,通常会用于影片中的影像连续处理,或是数字摄影系统中。Y’为颜色的亮度(luma)成分、而CB和CR则为蓝色和红色的浓度偏移量成份。Y’和Y是不同的,而Y就是所谓的流明(luminance),表示光的浓度且为非线性,使用伽马修正(gamma correction)编码处理。采样格式包括YCbCr 4:1:1、YCbCr 4:2:0、YCbCr 4:2:2和 YCbCr 4:4:4
iOS中视频编解码器
iOS与
OS X中只提供苹果公司认定的目前主流的几种媒体类型支持。对于视频文件来说主要有
H.264与
Apple ProRes视频格式标准。凡是符合这两个视频标准的文件苹果都提供对其编解码的支持。
注:
ProRes编解码器只能在
OS X上使用。
H.264:H.264/MPEG-4第10部分(MPEG-4第10部分也称为AVC,即Advanced Video Coding,高级视频编码)是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。
Apple ProRes:
ProRes是一个由苹果公司开发压缩技术,最大能支援5K分辨率。它于2007年随Final Cut Studio 2继承了Apple Intermediate Codec。
ProRes被认为是一个中间件或中间层编解码器,因为它的目的是为了专业编辑和生产工作流服务。
因为ProRes只能在
OS X上使用,如果在
iOS上进行开发只能使用
H.264。然而苹果公司提供了一种方法,当我们捕捉图像对其编辑时,可以将目标变成通用的
H.264编码格式。
相关文章推荐
- iOS数字媒体开发浅析
- iOS中多线程原理与runloop介绍
- 【iOS开发】---- SDWebImage支持webp格式的图片
- iOS 回收键盘时拦截其他点击方法解决办法
- iOS修改导航返回按钮内容和返回指定页
- nagios联系人邮箱错误导致nagios无法启动
- iOS之谓词详解
- 我常去逛的iOS干货文章、blog等
- git 本地临时分支命名
- iOS可执行文件瘦身方法
- iOS最佳实践
- iOS性能优化
- iOS学习笔记73-iOS事件响应链中Hit-Test View的应用
- iOS开发的一些奇巧淫技
- 浅谈 iOS 版本号
- iOS开发多线程篇—单例模式(ARC)
- iOS中控制器的强引用释放问题
- iOS App集成Apple Pay教程(附示例代码)
- iOS 里面的常用数学函数
- IOS适配方法-标注篇