(iPhone/iPad开发)细数Xcode 4.6+iOS 6 SDK中存在的bug漏洞之MPMoviePlayerController、AVAudioRecorder

最近在做MPMoviePlayerController时发现iOS 6的SDK中存在漏洞,正在播放时,会在终端显示log日志,而且,假如我在viewDidLoad方法中初始化整个MoviePlayer对象,虽然我设置了

[moviePlayer setRepeatMode:MPMovieRepeatModeOne];

使该视频播放可以循环重复播放,但是真正在真机上运行时,它还是只播放一次或者两三次。模拟器上没有问题


解决这个问题的办法是:一个方法是不要在viewDidLoad函数中设置moviePlayer的repeatMode,第二个方法是忽略这个repeat属性设置,通过监听播放器播放完成的消息,在这个消息的触发函数中让这个player重新播放

[[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(moviePlayBackDidFinished:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:self.moviePlayer];

我用的是第一个方法来解决这个问题的,第二种方法可能会引起循环播放有间断。终端输出日志问题还是避免不了,只好盼着SDK升级更新了。


还有一个问题,假如我需要在播放视频时同时需要录制音频或者播放其他音频文件,这样会容易出现一个问题,视频播放器和音频播放器都会使用系统音频输出hardware,导致播放视频时无法录制音频或者音频播放不出来,silence状态。


解决这个问题的关键是处理AVAudioSession的问题,在初始化MoviePlayer时设置AudioSession的active为NO

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    [audioSession setCategory:AVAudioSessionCategoryAmbient error:nil];
    [audioSession setActive:NO error:&mError];

在AVAudioPlayer初始化时,设置AudioSession的category为混音

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];

在AVAudioRecorder初始化时,设置AudioSession的Category为录音状态

NSError *mError = nil;
    AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    [audioSession setCategory:AVAudioSessionCategoryRecord error:nil];
    [audioSession setActive:YES error:&mError];

但这样还是会出现在iPhone 4 iOS6系统的真机录制音频时,视频播放有一些卡,不太顺畅。但效果比之前好一点。如果谁有更好的方法来绕过这个bug可以随时联系互相探讨下。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值