最近在做MPMoviePlayerController时发现iOS 6的SDK中存在漏洞,正在播放时,会在终端显示log日志,而且,假如我在viewDidLoad方法中初始化整个MoviePlayer对象,虽然我设置了
在AVAudioPlayer初始化时,设置AudioSession的category为混音
在AVAudioRecorder初始化时,设置AudioSession的Category为录音状态
但这样还是会出现在iPhone 4 iOS6系统的真机录制音频时,视频播放有一些卡,不太顺畅。但效果比之前好一点。如果谁有更好的方法来绕过这个bug可以随时联系互相探讨下。
[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可以随时联系互相探讨下。