MPAVController >>没有足够的缓冲跟上

我正在使用此代码播放video。

player= [[ MPMoviePlayerViewController alloc] initWithContentURL:movieURL]; player.navigationController.navigationBar.hidden = YES; player.moviePlayer.scalingMode = MPMovieScalingModeAspectFit; player.moviePlayer.controlStyle = MPMovieControlStyleNone; player.moviePlayer.movieSourceType = MPMovieSourceTypeFile; player.moviePlayer.fullscreen = NO; [self presentModalViewController:player animated:NO]; 

video播放工作完美但问题是,完成后,我得到这个结果在控制台。

 [MPAVController] Autoplay: Likely to keep up or full buffer: 0 [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up. 

然后在我试图logging声音但无法录音。

任何人都可以帮我解决这个问题。

同样的任务是由我完成…你可以参考我的代码…我希望它可以帮助…

 - (IBAction) startRecording:(id)sender { NSLog(@"**************Recording start**************"); NSMutableDictionary *recordSetting = [[NSMutableDictionary alloc] init]; // We can use kAudioFormatAppleIMA4 (4:1 compression) or kAudioFormatLinearPCM for nocompression [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey]; // We can use 44100, 32000, 24000, 16000 or 12000 depending on sound quality [recordSetting setValue:[NSNumber numberWithFloat:41000.0] forKey:AVSampleRateKey]; [recordSetting setValue:[NSNumber numberWithInt: kAudioFormatAppleLossless] forKey:AVFormatIDKey]; // We can use 2(if using additional h/w) or 1 (iPhone only has one microphone) [recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; [recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVEncoderBitRateKey]; NSError *error; if (![[NSFileManager defaultManager] fileExistsAtPath:mediaPath]) { [[NSFileManager defaultManager] createDirectoryAtPath:mediaPath withIntermediateDirectories:NO attributes:nil error:&error]; } mediaPath = [[NSString stringWithFormat:@"%@/sound.caf", DOCUMENTS_FOLDER] retain]; NSURL *url = [NSURL fileURLWithPath:mediaPath]; NSLog(@"AUDIOPATH%@",mediaPath); err = nil; NSData *audioData = [NSData dataWithContentsOfFile:[url path] options: 0 error:&err]; if(audioData) { NSFileManager *fm = [NSFileManager defaultManager]; [fm removeItemAtPath:[url path] error:&err]; } err = nil; audioRecorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&err]; if(!audioRecorder){ NSLog(@"audioRecorder : %@ %d %@", [err domain], [err code], [[err userInfo] description]); UIAlertView *alert = [[UIAlertView alloc] initWithTitle: @"Warning" message: [err localizedDescription] delegate: nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; return; } //prepare to record [audioRecorder setDelegate:self]; [audioRecorder prepareToRecord]; audioRecorder.meteringEnabled = YES; BOOL audioHWAvailable = audioSession.inputIsAvailable; if (! audioHWAvailable) { UIAlertView *cantRecordAlert = [[UIAlertView alloc] initWithTitle: @"Warning" message: @"Audio input hardware not available" delegate: nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [cantRecordAlert show]; [cantRecordAlert release]; return; } // start recording [audioRecorder record]; } 

我不知道这是否会有所帮助,但你应该用presentMoviePlayerViewControllerAnimated: , presentModalViewController:animated:来展示你的MPMoviePlayerViewController ,就像这样:

 [self presentMoviePlayerViewControllerAnimated:player]; 

如果您手动closuresMPMoviePlayerViewController ,则应使用dismissMoviePlayerViewControllerAnimated

这是一个 可能有助于解决MPAVController日志问题的线程。 看起来你正在做大量的MPMoviePlayerViewController moviePlayer的自定义 – 你可能会考虑使用MPMoviePlayerController而不是MPMoviePlayerViewController

在没有看到用于执行语音录制的代码的情况下,不可能判断您的语音录制问题是否源自与MPMoviePlayerViewController有关的事情,或者您是否在别处有错误。 我会build议张贴更多的代码。

我还发现这些消息可能是由于向媒体播放器发送了错误的URL而导致的。 有时候确实很简单。

您需要在播放video后录制audio,因此您必须使用此通知才能知道电影播放器​​已经完成播放video。为此,您需要使用此代码。

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayerController]; 

在那个moviePlaybackComplete:方法中你有录制audio。 为此,您最好使用AVAudioPlayer类。 现在使用这段代码进行录制

 AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:recordedTmpFile settings:recordSetting error:&error]; [recorder setDelegate:self]; [recorder prepareToRecord]; [recorder record]; 

检查MPMoviePlayerController上的useApplicationAudioSession属性。 在iOS 3.1.x中,电影播放器​​总是获得自己的系统提供的audio会话。 在较新版本的iOS中,它现在可以共享应用程序会话,这也是默认值。 在开始播放电影之前,尝试将该属性切换为NO。