代码改变世界

关于IOS7以及向下兼容音量控制问题

2014-03-06 12:56  Mr.Xer  阅读(555)  评论(0编辑  收藏  举报

最近做个简单的播放界面,只是简单的设计到播放音频,ios系统自带播放有四个类可以播放音频

AVPlayer,AVAudioPlayer,MPMusicPlayerController,MPMoviePlayerController
 
因为设计到播放本地和网络音频,人又比较偷懒,尝试看用自带的类能不能做个较好的功能,经过各种尝试之后,决定用AVAudioPlayer播放本地音频,网络音频用MPMoviePlayerController。其实AVPlayer既可以播放本地又可以播放网络音频,但是由于官方封装的东西太少,本来都还可以凑合着用一下,但是因为最近推出了IOS7,在IOS7下运行会出现获取不到网络音频的时间信息,以至于错误到0/0这种表达式跳转到汇编里卡主,调试了好久才找到问题,刚开始还以为是基础数据类型强转出现了问题(不知道是不是官方文档没注意更新,获取时间的接口被弃用还是改用别的api了,总之就是在IOS7以下能获取音频时间,IOS7以上就全部是0)。各种纠结之后决定AVAudioPlayerMPMoviePlayerController组合,但是问题冒出来了,MPMoviePlayerController不能控制音量,必须通过

[[MPMusicPlayerController applicationMusicPlayer] setVolume:value];

来设置系统音量,好吧,凑合着用吧,但是奇葩问题是接二连三的,IOS7以上次api废弃,这是神马节奏,看官方解释

// The current volume of playing music, in the range of 0.0 to 1.0.

// This property is deprecated -- use MPVolumeView for volume control instead.

 

@property(nonatomic) float volume NS_DEPRECATED_IOS(3_0, 7_0);

ok,那没办法了,就用MPVolumeView来搞吧,各种addSubview之后,我插,怎么样都看不到slider,无奈在网上也搜了很久,在谷歌里输关键字的时候看到了“mpvolumeviewnot showing in simulator”这句,我去,果断真机调试,这尼玛才有了slider,惊讶啊,为毛这种东西文档里没找到,难道我傻逼了,吐槽到此了。

最后说一下,关于音量控制

AVPlayer:提供音量控制api,但是只支持IOS7

AVAudioPlayer:提供音量控制api,目前是都支持

MPMusicPlayerController:提供音量控制api,但是支持IOS7以下

MPMoviePlayerController:貌似暂时不支持音量控制

以后要用系统自带控件播放音频的小伙伴们要掌握好了

 

 

转载自:

矢倉_Andy

 

http://blog.sina.com.cn/s/blog_5c5c87d80101bel4.html