AVFoundation 基础介绍
1个像素点大小 红色8位 绿色8位 蓝色8位
数字媒体压缩
色彩二次抽样
定义:减少颜色数据的过程
why:眼睛对亮度的敏感度高于颜色
编译码器压缩
概念:使用高级压缩算法对需要保存或发送的音频或视频数据进行压缩和编码,同时它还可以将压缩文件解码成适合播放器播放和编辑的媒体资源文件
有损压缩的目的:使用 psycho-acoustic 或 psycho-visual 模式作为一种方法来减少媒体内容中的冗余数据,这样会使原文件质量的损耗达到最小。
视频编解码器
H.264
该规范是 Motion Picture Experts Group(MPEG)所定义的 MPEG-4的一部反。
- 空间:压缩独立视频帧,被称为帧内压缩。(有损压缩)
- 时间:通过以组为单位的视频帧压缩冗余数据,这一过程被称为帧间压缩(不降低图片质量的情况下尽可能缩小尺寸,类似 JEPG 压缩原理)
- GOP:在帧间压缩中,很多帧被组合在一起作为一组图片,对于~所存在的时间维度的冗余可以消除
- I-frames:一些单独的帧或关键帧,包含创建完整图片需要的所有数据。(每个 GOP 有一个 I-frames,尺寸最大的,但解压最快的)
- P-frames:预测帧。从基于最近I-frames 和 P-frames 的可预测的图片进行编码得到的。~引用最近的预测P-frames 和 I-frames。临近的 P-frames和 B-frames 可以引用~。
- B-frames:双向帧。是基于使用之前和之后的帧信息进行编码后得到的帧。(几乎不需要储存空间,但其解压过程会耗费较长时间,因为依赖于周围的其他帧)
H.264支持编码视图: - Baseline:最低效率的压缩,不支持 B-frames。如 iPhone 3GS
- Main:算法更多,比较高的压缩率
- High:最高质量,用了所有能用的编码技术和算法
Apple ProRes
- 是一个中间件或中间层编解码器,因为目的是为专业编辑和生产工作流服务。
- 是独立于帧的,意味着只有 I-frames 可以被使用,使其更适合在内容编辑上。
ProRes 是有损编解码器,只在 OSX 可用。
音频编解码器
Core Audio 框架支持的,AV~都支持。在不用线性 PCM 音频的情况下,更多只能用ACC。
ACC(高级音频编码)
- 是 H.264标准相应的音频处理方式,目前是音频流和音频下载资源中最主流的编码方式。
- 比 MP3有提升,可以在低比特率的前提下提供更高质量的音频,是在 Web 上发布和传播的音频合适中最理想的。
- 没有来自证书和许可方面的限制
注:对于 MP3可以解码,不能编码
播放和录制音频
iOS 系统提供了一个可管理的音频环境(managed audio enviroment),可以带给所有 iOS 用户非常好的用户体验。
音频会话(audio session)
在大部分应用程序中,默认都是好的,但开发媒体应用程序时一般是不需要的。
默认配置:
- 激活了音频播放,但是音频录音未激活
- 当用户切换响铃/静音开关到“静音”模式时,应用程序播放的所有音频都会消失
- 当设备显示解锁屏幕时,应用程序的音频处于静音状态
- 当应用程序播放音频时,所有后台播放的音频状态都会处于静音状态
配置音频会话
// 最佳配置位置
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *error;
if (![session setCategory:AVAudioSessionCategoryPlayback error:&error]) {
NSLog(@"Category Error: %@",[error localizedDescription]);
}
if (![session setActive:YES error:&error]) {
NSLog(@"Activation Error:%@",[error localizedDescription]);
}
return YES;
}
使用 AVAudioPlayer 播放音频
除非 从网络流中播放音频、需要访问原始音频样本或者需要非常低的时延,否则 AVAudioPlayer 都能胜任。
对播放器进行控制
- play
- pause
- stop
注:调用 stop 方法会撤销调用 prepareToPlay 时所做的设置,而调用 pause 方法则不会
优化:
- 修改播放器的音量[0,1]: eg. 声音渐隐效果
- 修改播放器的 pan 值:允许立体声播放, [-1.0(极右),1.0(极右)],默认为0
- 调整播放率[0.5,2]倍:允许用户在不改变音调的情况下调整播放率
- 通过设置 numberOfLoops属性实现音频无缝循环 :-1无线循环
- 进行音频计量当播放发生时从播放器读取音量力度的平均值及峰值
网友评论