Media层
媒体层提供了图形、音频和视频技术支持,以达到移动设备上极佳的多媒体体验。
一、图形技术
高品质图形是iOS应用程序非常重要的一部分,最简单(和最有效)的方法来创建一个应用程序是使用预渲染图片与UI标准控件结合实现系统绘制。然而,有些时候你可能需要一些稍微复杂的图形,你可以使用下面的技术来管理你的图形内容:
1、Core Graphics(Quartz)处理本地2D矢量图形和基于图像的渲染 -------Core GraphicsFramework
2、Core Animation提供视图动画高级支持-----Quartz Core Framework
3、Core Image提供视频和静态图片的高级支持-----Core Image Framework
4、OpenGL ES和GLKit 提供2D、3D硬件加速渲染接口------OpenGL ES Framework GLKit Framework。
5、Core Text提供了一个复杂的文本布局和渲染引擎。-----Core Text Framework。
6、Image I/O提供大部分图像格式的读写接口。-------Image I/O Framework
7、Assets Library framework提供了在用户相册访问图片和视频的接口------Assets Library Framework
在大多数情况下,应用程序运行在Retina屏设备上几乎不用对代码做任何修改。你画的任何内容会自动支持高分辨率屏幕。基于矢量的绘图代码,系统框架自动帮你完成了像素的填充。如果你在程序中使用了图片,系统自动帮你加载高分辨率图片。------App-Related Resources介绍了如何适应高清屏幕
二、音频技术
音频技术在iOS中被设计用来提供丰富的音频用户体验。这个体验包括:播放高品质音频,录制高品质音频,以及触发某些设备的震动功能。
系统提供了几种方法来播放以及录制音频内容。接下来的框架列表是按照高层到底层的顺序列举的。Media Player Framework是最高层的音频接口,当选择一个音频技术的时候,高层的框架是最容易使用也是最优先的。低层框架提供更大的灵活性和控制,但是需要你做更多的功能。
(1)Media Player framework提供简单的方式访问用户的iTunes列表,支持播放列表并且能监测播放状态。------Media Player Framework
(2)AV Foundation 提供了一系列简单易用的OC接口用于管理音频播放和录制。------AV Foundation Framework
(3)OpenAL 提供了一系列跨平台接口提供位置音频。------OpenAL Framework
(4)Core Audio框架提供了 简单和复杂接口来播放以及录制音频内容。你使用这个接口播放系统的警告,手机震动,管理缓冲,播放多通道本地或流音频内容。------Core Audio
iOS支持以下音频格式:------Media Layer Frameworks
AAC
Apple Lossless(ALAC)
A-law
IMA/ADPCM(IMA4)
Linear PCM
u-law
DVI/Intel IMA ADPCM
Microsoft GSM 6.10
AES3-2003
三、视频技术
无论你播放应用程序的电影文件还是网络上的视频流,iOS提供了几种播放视频内容的技术。设备的硬件可以捕获视频并且应用到你的程序中。
系统提供了几种途径播放以及录制视频,你可以根据需要选择使用这些技术。当选择一个视频技术,记住,高级框架帮你做了很多工作,简化了操作,应该首选高级框架。下面的框架列表是按从高到低顺序列举的。
(1)UIImagePickerController类提供了使用设备录像的接口。
(2)Media Player Framework提供了一系列简单易用呈现全屏或者小屏视频的接口。-----Media Player Framework
(3)AV Foundation Framework提供了一些列OC接口用于管理捕获或者播放视频。-----AV Foundation Framework
(4)Core Media 描述了高层框架使用的底层数据类型,提供了低层接口操作媒体。-----Core Media Framework
iOS支持播放以下后缀的文件:.mov、.mp4、、m4v、.3gp
压缩标准:
H.264 视频 最高达1.5Mbps,640x480像素,每秒30帧。低复杂度版本的H.264基本配置使用AAC-LC音频,最高达160Kbps,48kHZ,立体声,视频以.m4v、.mp4、.mov为后缀
H.264 视频 最高达768Kbps,320x240像素,每秒30帧。基本配置使用AAC-LC音频,最高达160Kbps,48kHZ,立体声,视频以.m4v、.mp4、.mov为后缀
MPEG-4视频,最高达2.5Mbps,640x480像素,30帧每秒,基本配置使用AAC-LC音频,最高达160Kbps,48kHZ,立体声,视频以.m4v、.mp4、.mov为后缀
想获得更多关于UIImagePickerController类的使用,参考Camera Programming Topics foriOS.
四、AirPlay
AirPlay 是一中能让你应用程序的音频流在Apple TV或者其他第三方的扬声器或者接收器上播放的技术。AV Foundation框架和Core Audio都内置了AirPlay。使用上述框架,一旦你选择使用AirPlay播放音频,都会被系统自动处理以及转换。
在iOS5里,用户可以AirPlay将iPad2上的内容映射到Apple TV2上。开发者可以创建UIScreen对象通过AirPlay展示不同的内容到iPad2上。iOS5同样提供了多种方式通过AirPlay传递内容,包括使用AV Foundation Framework中的 AVPLayer以及UIKit的中的UIWebView,此外,Media Player Framework支持显示 “正在播放”信息在多个地方。-------AirPlay OverView。
Media 层框架
Assets Library Framework
iOS4.0之后引入的,提供了一个基于查询的接口来检索用户设备上的照片和视频。使用这个框架,你可以在自己的程序内来访问 Photos 应用程序的 相册以及视频资源。同样可以存储照片或者视频到相册。
更多这个框架中类和方法的介绍,参考 Assets Libarry FrameworkReference。
AV Foundation Framework
iOS2.2中引入,框架包含了 用于播放音频内容的OC类。你可以使用这些类播放任意时长的 基于文件或者内存的音频。你可以同事播放多个声音,可以控制每个声音的各个方面。iOS3.0之后,这个框架还可以录制音频以及管理音频会话。iOS4.0之后,这个框架的服务扩大到了:
1、媒体资源管理
2、媒体编辑
3、电影捕捉
4、电影回放
5、跟踪管理
6、媒体元素据管理
7、立体声
8、精确同步声音
9、一个OC接口来确定声音的文件信息,例如数据格式,采样率,和声道数量。
iOS5以后,AV Foundation Framework包含了 支持通过AirPlay播放音频、视频流的类AVPlayer。AirPlay默认是启用的,但可以根据需要设置开启或关闭。
AVFoundation Framework 是iOS中单独来录制和播放音频、视频的框架,相对于高级框架,在处理以及管理媒体资源上,提供了更为完美的支持 。
更多这个框架中类和方法的介绍,参考 AVFoundation Framework Reference。
Core Audio
本地音频是有Core Audio家族一些列框架支持的,下面的表会列出这个家族。
Framework |
Services |
CoreAudio.framework |
定义了Core Audio中要用到的各种音频数据类型那个. ---- Core Audio Framework Reference. |
AudioToolbox.framework |
提供音频文件和音频流的回放和录制服务,同样提供了管理音频文件,播放系统警告声音以及 设备震动接口 . ---- Audio Toolbox Framework Reference. |
AudioUnit.framework |
提供服务使用内置的音频单元,音频处理模块.----Audio Unit Framework Reference. |
CoreMIDI.framework |
提供底层MIDI服务. ---- Core MIDI Framework Reference. |
MediaToolbox.framework |
提供访问音频分接开关的接口. |
Core Audio是一个基于C的接口,支持操作立体声音频,你可以使用Core Audio在iOS应用程序中生成、录制、混合以及播放音频。你还可以使用Core Audio来触发手机设备的震动功能。
更多Core Audio的信息,参考Core Audio OverView. 关于如何使用Audio ToolBox Framework播放音频,参考Audio Queue Services Programming Guide。
Core Graphics Framework
CoreGraphics framework包含Quartz 2D绘图API接口。Quartz是OSX中先进的、基于矢量绘图引擎。它提供了支持基于路径图,反锯齿的渲染、渐变、图片、颜色、坐标空间转换和PDF文档创建、显示和解析。虽然API是基于C的,但是却采用了基于对象的方式抽象了画图对象,使它更容易存储和重用你的图像内容。
更多关于如何使用Quartz绘图,参考Quartz 2D Programming Guide和Core Graphics Framework Reference。
Core Image Framework
iOS5引入,提供了一套强大的内置过滤器用于操作视频和静态图片。你可以使用内置的过滤器实现简单的操作(触摸纠正照片)以及高级的操作(面部检测)。使用这些过滤器的优势是,它们在以无损的方式运作,保证你的原始图像是不会改变。此外,Core Image利用可用的CPU和GPU处理能力,确保操作是快速有效的。
CIImage类提供了访问标准过滤器的方法,你可以使用它来提高照片的质量。创建其他类型的过滤器,你可以创建和配置一个CIFilter对象实现你需要的过滤器。
更多关于Core Image Framework里类和过滤器的信息,参考 Core Image Reference Collection。
Core MIDI Framework
iOS4.2引入,提供了标准的方法与MIDI设备通信,包括硬件键盘和合成器。你用这个框架来发送和接收MIDI的消息以及与能连接到iOS设备的设备交互(通过网路相连或者桥接器)。
更多关于这个框架的信息,参考 Core MIDI Framework Reference
Core Text Framework
iOS3.2引入,包含一组简单的、高性能的基于C的接口布局文本和处理文字。Core Image framework提供了一个完整的文本布局引擎,您可以管理文本在屏幕上的位置,你管理的文本可以使用不同的字体以及渲染属性。
这个框架主要用于处理复杂文本,比如文本处理程序。如果你的应用程序只需要简单的文本输入和显示,你应该继续使用UIKit中的文本类。
更多关于Core Text接口的信息,参考 Core Text Programming Guide和Core Text Reference Collection。
Core Video Framework
iOS4引入,提供接口导入和导出图像数据和图像元素据,这个框架利用Core Graphics数据类型和函数支持所有iOS上可用的图像类型。
iOS6之后,你可以使用这个框架来访问IPTC、EXIF元素据属性和图像。更多这个框架的函数和数据类型,参考 Image I/O ReferenceCollection。
GLKit Framework
iOS5引入,包含一组基础工具类,简化了创建OpenGL ES2.0程序。GLKit支持四个关键领域的应用开发:
1、GLKView和GLKViewController提供一个标准的实现视图和关联启用OpenGL ES的渲染循环。视图管理层framebuffer对象代表应用程序,你的程序只需要往上面画。
2、GLKTextureLoader提供了图像转换和加载程序到您的应用程序,让它自动加载纹理图像到你的上下文,它可以同步或一部加载纹理。异步加载纹理时,您的应用程序提供了完成处理block,当你的被加载到上下文的时候触发。
3、框架提供了实现GLKit向量、矩阵、四元素以及矩阵堆栈操作,提供相同的功能在Open GL ES 1.1中
4、GLKBaseEffect、GLKSkyboxEffect和GLKReflectionMapEffect类提供现有的、可配置的图形着色器,实现常用的图形操作。特别是在OpenGL ES 1.1规范中,GLKBaseEffect类实现了照明和素材模型,简化了从OpenGL ES1.1到OpenGL ES 2.0迁移所需的工作。
更多关于GLKit框架中类的介绍,参考 GLKit Framework Reference.
Media Player Framework
提供播放音频和视频内容高层支持,你可以使用系统标准接口播放视频。
在iOS3.0,增加对用户iTunes音乐库的访问支持,你可以播放单个音乐和音乐列表,搜索歌曲以及呈现媒体选择界面给用户。
在iOS3.2,增加了视频窗口的大小调整接口(以前视频只能是全屏的)。此外,增加了众多的接口来配置和管理电影的播放。
在iOS5,增加了“正在播放”信息在锁屏界面。这些信息可以通过AirPlay显示在Apple TV上。还有接口能监测视频是否正在使用AirPlay显示。
更多关于Media Player Framework中类的信息,参考Media Player Framework Reference.更多关于如何使用iTunes列表的信息,参考 iPod Library AccessProgramming Guide。
OpenAL Framework
OpenAL接口是一个跨平台的音频接口,你可以在游戏或其他程序中用它来完成高性能、高质量的音频服务。因为是一个跨平台的OpenAL标准,所以很容易使用它来实现跨平台。
更多OpenAL的信息,以及如何使用它,参考http://www.openal.org
OpenGL ES Framework
提供工具来绘制2D和3D内容。它是一个基于C的框架,与设备硬件紧密合作,为全屏游戏提供高帧率渲染。通常OpenGL框架结合EAGL接口使用,这些接口是OpenGL ES框架的一部分,在OpenGL ES绘画代码和UIKit框架中的视图、窗口对象之间提供接口。
iOS3.0之后,包含了既支持OpenGL ES 2.0又支持OpenGL ES 1.1的接口规范。2.0规范提供了支持片段或顶点着色的着色器(仅支持部分iOS设备,且iOS系统在3.0以上)。1.1规范支持所有iOS设备以及所有iOS系统版本。
更多关于如何在应用程序中使用OpenGL ES的信息,参考OpenGL ES Programming Guide for iOS。
Quartz Core Framework
包含Core Animation接口,Core Animation是一个先进的动画合成技术,优化渲染路径来实现复杂的动画和视觉效果。它提供了一个高层次的OC接口(使用硬件性能)来配置动画效果,你可以使用OC接口创建自定义的动画。
更多关于如何在程序中使用Core Animation的信息,参考Core Animation Programming Guide以及Core Animation ReferenceCollection。