iOS音频播放 (九):边播边缓存
好久没写过博客了,在这期间有很多同学通过博客评论、微博私信、邮件和我交流iOS音频方面的相关问题,其中被问到最多的是如何实现“边播边缓存”,这篇就来说一说这个话题。顺便一提,本文的题目虽然为“iOS音频播放”,但其中所涉及的部分技术方案在OSX平台或者在流播放视频下同样适用。
Read on →ChengYin's coding life
Where there is a will, there is a way. -- Thomas Edison
好久没写过博客了,在这期间有很多同学通过博客评论、微博私信、邮件和我交流iOS音频方面的相关问题,其中被问到最多的是如何实现“边播边缓存”,这篇就来说一说这个话题。顺便一提,本文的题目虽然为“iOS音频播放”,但其中所涉及的部分技术方案在OSX平台或者在流播放视频下同样适用。
Read on →由于最近工作量非常饱和,所以这第七篇来的有点晚(创建时间是9月7日。。说出来都是泪)。
现在市面上的音乐播放器都支持iPod Library歌曲(俗称iPod音乐或者本地音乐)的播放,用户对于iPod音乐播放的需求也一直十分强烈。这篇要讲的是如何来播放iPod Library的歌曲。
Read on →在前几篇中我分别讲到了AudioSession
、AudioFileStream
、AudioFile
、AudioQueue
,这些类的功能已经涵盖了第一篇中所提到的音频播放所需要的步骤:
NSFileHandle
AudioFileStream
/AudioFile
AudioQueue
省略
AudioQueue
AudioQueue
下面我们就讲讲述如何用这些部件组成一个简单的本地音乐播放器
,这里我会用到AudioSession、AudioFileStream、AudioFile、AudioQueue。
注意:在阅读本篇请实现阅读并理解前面1-5篇的内容以及2-5篇最后给出的封装类,本篇中的播放器实现将基于前面几篇中给出的MCAudioSession、MCAudioFileStream、MCAudioFile和MCAudioOutputQueue进行实现。
Read on →从事音乐相关的app开发也已经有一段时日了,在这过程中app的播放器几经修改我也因此对于iOS下的音频播放实现有了一定的研究。写这个系列的博客目的一方面希望能够抛砖引玉,另一方面也是希望能帮助国内其他的iOS开发者和爱好者少走弯路(我自己就遇到了不少的坑=。=)。
本篇为《iOS音频播放》系列的第一篇,主要将对iOS下实现音频播放的方法进行概述。
Read on →近期有部分用户反馈我们的app在使用时有发热现象,在排查原因的过程中发现了一个奇怪的问题。在某个页面推出时Instruments
的Core Animation
会有帧数显示,数值在59~60,而此时并没有任何需要消耗Graphics的代码在跑,所有UI都是静止的。这个现象只会在iOS 7.1.x上出现,其他系统包括最新发布的iOS8 beta上均没有出现类似问题。
造成这个现象的页面比较特殊,其展现形式看上去虽然是一个UIViewController把一个UINavigationController用ModalView的形式push出来了,但实际上是把UINavigationController的.view直接add在了UIViewController的.view上,并用一个UIView动画展示页面。
为了弄清楚到底为什么会在UI静止的情况下产生Graphics消耗,我新建了一个空工程用相同的方法实现了一个推出页面的动画,然后profile却没有发现有问题。再次回头看app发现这个推出页面的controller是个UITabBarController,于是为测试工程加上tabBarController后再次profile,问题重现了,Core Animation在页面出现之后显示了帧数,页面隐藏之后帧数显示就消失了,从而可以推断是UITabBarController上的某个UI元素导致了这个问题。
接下来的步骤就是遍历UITabBarController的view上所有的subview并逐个隐藏来进行测试,幸运的是第一个就蒙对了,在我隐藏了UITabBarController的tabbar以后奇怪的帧数就不再出现了。这个现象很快让我想到了iOS 7以后苹果加入的模糊效果,这个效果在UINavigationBar、UITabBar、UIToolBar等UI控件上都有使用,下面把UITabBarController去掉,在view上直接add一个UIToolBar,发现问题同样会出现。至此基本确定是由于这个模糊效果造成的,至于为什么只会在7.1.x上出现这个问题。。可能只有苹果才知道了=。=。
测试程序代码点这里