MPMoviePlayerController无法从Documents文件夹中播放

时间:2012-10-08 10:17:46

标签: ios mpmovieplayercontroller nsurl nsdocumentdirectory

Desperated。 大家好! 我在使用MPMoviePlayerController时遇到了一些问题。 我已经使用了NSBundle的视频。但那不是我需要的。我需要从Documents目录中播放它,因为这是我存储录制视频的地方,其中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 load and play movie saved in app documents

MPMoviePlayerController does not work with movie in documents folder

MPMoviePlayerViewController play movie from Documents directory - objective-c

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

请帮忙! :)

3 个答案:

答案 0 :(得分:20)

你没有以正确的方式构建文件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];

您应该使用stringByAppendingPathComponent方法NSString将路径和文件添加到路径中; 此外,在fileURLWithPath:上创建文件网址时使用NSURL,这将为给定路径创建正确的NSURL。

答案 1 :(得分:10)

每个人都做的最常见的错误就是全部使用

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

而不是

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

答案 2 :(得分:0)

-(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> 在您的相应代码中。 祝你好运!!!