因为最近作音频方面的工做,就调研了一下关于音频播放的一些知识,中间也走过很多弯路,但愿这篇小集能对关注咱们的同窗一点启示,少走一些弯路。最后提供一份我看过的资料。这里关于音频播放简单作一个总结。iOS 中音频播放有如下 5 种方式(若是你有更多的方式告诉我,很是感激),它们的使用场景各不一样。
[1] 播放小于 30s 的音频:
AudioServicesPlaySystemSound 能够播放小于等于30s的音频,主要用于播放一些提示音,你能够利用 AudioServicesPlaySystemSoundWithCompletion 的值播放完成的 callback。它有如下特色:
- 使用系统音量,不能修改播放音量;
- 马上开始播放,不能暂停;
- 不支持快进播放,也不能够循环播放;
- 同一时刻只能播放一个音频;
- 只能经过手机播放音频,不能经过其它设备输出,好比不能经过车载播放。
查看更多的系统声音ID:网页连接
[2] AVAudioPlayer 播放本地的音频,或者已加载到内存中的音频流,主要用于播放本地的一些音频文件。注意它不能播放网络音频。它有如下特色:
- 能够从任意位置播放,可快进,快退;
- 能够循环播放;
- 能够同时播放多个音频;
- 能够控制播放速率;
[3] AVPlayer 能够播放本地和网络音频,也能够播放视频,它支持流媒体播放,也就是说咱们能够用它来作边下别播的使用场景。
[4] AVQueuePlayer 是 AVPlayer 的子类,它含有一个队列,主要用来播放一个音视频队列。
[5] Audio Queue 主要用来播放音频,录音,它比较底层,会有更多的控制权,若是 APP 主要功能是基于音频播放,推荐使用这个。
总的来讲,若是普通的本地音频播放,能够选择 AVAudioPlayer ,这个不须要了解更多的音频知识,就能够达到一个基本的播放;若是想作流媒体播放,建议使用 AVPlayer + Local Server 的方式,相似于唱吧目前开源的方式。固然也能够选择 Audio Queue,不过这个难度比较高,须要对音频播放有一个总体的了解,推荐使用三方库 FreeStream,不过须要一些 C++ 的知识,由于使用过程当中有一些坑须要填,这样不得不阅读源码。最后推荐一些不错的文章。
官方 Audio Queue: 网页连接
官方 AudioSession: 网页连接
@pp锅的码农生活 博客: 网页连接
@cy_zju 博客:网页连接
更多知识小集的内容,请查看:http://t.cn/RYxpsqmphp