【问题标题】:MPMoviePlayerController doesn't play from Documents folderMPMoviePlayerController 无法从 Documents 文件夹播放
【发布时间】:2012-09-28 13:59:51
【问题描述】:

绝望了。 大家好! 我遇到了 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

我还检查了类参考,没有关于从 Documents 播放的具体内容。 我的项目设置: 使用最新的 iOS 6, 部署目标 5.0 在 iOS6 iPhone 模拟器和装有 iOS 6 的 iPad 上进行测试。 如果我忘记添加东西,请提醒我,我会立即添加。

请帮忙! :)

【问题讨论】:

    标签: ios mpmovieplayercontroller nsurl nsdocumentdirectory


    【解决方案1】:

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

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

    【讨论】:

    • 好吧,伙计们,这些答案当然值得赞许和尊重。谢谢。
    • @Dumoko ...当然,我的朋友...当之无愧...我就是这么做的
    【解决方案2】:

    每个人最常犯的错误就是都使用

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

    而不是

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

    【讨论】:

    • 你应该得到更多像先生!
    【解决方案3】:
    -(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 在您各自的代码中。 祝你好运!!!

    【讨论】:

      猜你喜欢
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      相关资源
      最近更新 更多