MPMoviePlayerController不能从Documents文件夹中播放

Desperated。 大家好! 我有一些与MPMoviePlayerController问题。 我已经使用NSBundle的video。 但那不是我所需要的。 我需要从Documents目录播放它,因为那是我存储录制video的地方,这些URL存储在CoreData中。 但是让我们把它放在一边,简化代码到最小的需要。 这个代码实际上是工作如果使用contentURL,导致NSBundle。 之后,我做了什么去文档的地方。 我做的事:

NSURL *contentURL = [[NSBundle mainBundle] URLForResource:@"Oct_08_2012_10_00_51" withExtension:@"mp4"]; // this works NSString* docPath = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString * docaPathFull = [NSString stringWithFormat:@"%@%@", docPath, @"/Oct_08_2012_10_00_51.mp4"]; NSURL * docUrl= [NSURL URLWithString: docaPathFull]; BOOL ex = [[NSFileManager defaultManager] fileExistsAtPath:docaPathFull]; NSLog(@"file exists: %d, path using docPath: %@",ex, docaPathFull); MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:docUrl]; player.shouldAutoplay = YES; player.controlStyle = MPMovieControlStyleEmbedded; [player.view setFrame: self.thumbButton.bounds]; [player prepareToPlay]; [self.view addSubview: player.view]; [player play]; 

我们有什么:

 2012-10-08 13:14:43.532 Voto[11968:907] file exists: 1, path using docPath: /var/mobile/Applications/07B8574A-A3BA-4B23-BB3F-995B33A01B95/Documents/Oct_08_2012_10_00_51.mp4 2012-10-08 13:14:43.907 Voto[11968:907] content URL: file://localhost/var/mobile/Applications/07B8574A-A3BA-4B23-BB3F-995B33A01B95/Voto.app/Oct_08_2012_10_00_51.mp4 2012-10-08 13:14:44.265 Voto[11968:907] doc URL: /var/mobile/Applications/07B8574A-A3BA-4B23-BB3F-995B33A01B95/Documents/Oct_08_2012_10_00_51.mp4 2012-10-08 13:14:45.343 Voto[11968:907] [MPAVController] Autoplay: Disabling autoplay for pause 2012-10-08 13:14:45.344 Voto[11968:907] [MPAVController] Autoplay: Disabling autoplay 2012-10-08 13:14:46.518 Voto[11968:907] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 1, on player: 0) 2012-10-08 13:14:46.540 Voto[11968:907] [MPAVController] Autoplay: Enabling autoplay 2012-10-08 13:14:46.554 Voto[11968:907] [MPAVController] Autoplay: Likely to keep up or full buffer: 0 2012-10-08 13:14:46.555 Voto[11968:907] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up. 2012-10-08 13:14:46.557 Voto[11968:907] [MPAVController] Autoplay: Enabling autoplay 2012-10-08 13:14:46.567 Voto[11968:907] [MPCloudAssetDownloadController] Prioritization requested for media item ID: 0 2012-10-08 13:14:46.871 Voto[11968:907] [MPAVController] Autoplay: Enabling autoplay 

所以,该文件存在…我已经看过的问题:

MPMoviePlayer加载并播放保存在应用程序文件中的电影

MPMoviePlayerController不能用于文档文件夹中的电影

MPMoviePlayerViewController从Documents目录播放影片 – objective-c

我也用类引用来检查ut,没有关于从Documents中播放的具体内容。 我的项目设置:使用最新的iOS 6,部署目标5.0在iOS6 iPhone模拟器和iOS 6上的iPadtesting。如果我忘了添加一些东西,请提醒我,我会立即做。

请帮忙! 🙂

那么你不是正确的方式build立文件的URL,你应该这样做:

 NSString *docPath = [NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *docaPathFull = [docPath stringByAppendingPathComponent:@"/Oct_08_2012_10_00_51.mp4"]; NSURL *docUrl= [NSURL fileURLWithPath:docaPathFull]; 

您应该使用NSStringstringByAppendingPathComponent方法将目录和文件添加到path; 另外,当在NSURL上创build文件URL使用fileURLWithPath:时,这将为给出的path创build一个正确的NSURL。

人人最常犯的错误就是全部使用

 NSURL *fileURL = [NSURL URLWithString:mVidPath]; ^^^^^^^^^^^^^ 

代替

 NSURL *fileURL = [NSURL fileURLWithPath:mVidPath]; ^^^^^^^^^^^^^^^ 
 -(IBAction)playVideo { NSURL *vedioURL; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSArray *filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:documentsDirectory error:nil]; NSLog(@"files array %@", filePathsArray); NSString *fullpath; for ( NSString *apath in filePathsArray ) { fullpath = [documentsDirectory stringByAppendingPathComponent:apath]; vedioURL =[NSURL fileURLWithPath:fullpath]; } NSLog(@"vurl %@",vedioURL); MPMoviePlayerViewController *player = [[MPMoviePlayerViewController alloc] initWithContentURL:vedioURL]; [player.view setFrame: self.view.bounds]; [player.moviePlayer prepareToPlay]; [self.view addSubview:player.view]; player.moviePlayer.controlStyle = MPMovieControlStyleDefault; player.moviePlayer.shouldAutoplay = YES; [player.moviePlayer setFullscreen:YES animated:YES]; [player.moviePlayer play]; [self presentMoviePlayerViewControllerAnimated: player]; } 

不要忘记在你的代码中添加MediaPlayer.framework和#import <MediaPlayer / MediaPlayer.h>。 祝你好运!!!