如何在 ipad 应用程序中播放文档文件夹中的视频文件

Posted

技术标签:

【中文标题】如何在 ipad 应用程序中播放文档文件夹中的视频文件【英文标题】:how to play video file from documents folder in ipad application 【发布时间】:2013-04-17 08:37:07 【问题描述】:

我正在录制视频并将其保存到文档文件夹,我想稍后使用视频路径再次播放,但它没有播放我正在使用以下代码获取文档文件夹中文件的路径,然后播放它

          NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
      NSString *documentsDirectory = [paths objectAtIndex:0];



      NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
        [dateFormat setDateFormat:@"dd-MM-yyyy||HH:mm:SS"];
      NSDate *now = [[[NSDate alloc] init] autorelease];
      NSDate* theDate = [dateFormat stringFromDate:now];
      NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Default Album"];
     if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
            [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil];
     NSString *videopath= [[[NSString alloc] initWithString:[NSString stringWithFormat:@"%@/%@.mov",documentsDirectory,theDate]] autorelease];
     NSLog(@"Vide Path %@",videopath);
     NSString *path = [[NSBundle mainBundle] pathForResource:videopath ofType:@"mov" inDirectory:nil];
     NSURL *movieURL = [NSURL fileURLWithPath:path];
     player= [[ MPMoviePlayerViewController alloc] initWithContentURL:movieURL];
     [self presentMoviePlayerViewControllerAnimated:player];

你能帮帮我吗,谢谢。

【问题讨论】:

从您的代码中您没有保存您的视频。 @Vedchi 我正在从 ipad 录制视频,然后我按下使用按钮而不是保存 @Vedchi 你能帮我解决这个问题吗 然后使用您在文档目录中保存视频的路径,而不是上面构建的路径。使用 NSDateFormatter 和 NSDate,您正在创建一个实际上不存在于文档目录中的新路径。 【参考方案1】:

而不是这个

NSString *videopath = [[[NSString alloc] initWithString:[NSString stringWithFormat:@"%@/%@.mov",documentsDirectory,theDate]] autorelease];

您可以尝试不使用.mov 扩展名。因为你会在这一行告诉扩展。

NSString *path = [[NSBundle mainBundle] pathForResource:videopath ofType:@"mov" inDirectory:nil];

注意:在这一行

player = [[MPMoviePlayerViewController alloc] initWithContentURL:movieURL];

如果播放器有保留属性,会导致内存泄漏..

【讨论】:

由于未捕获的异常 'NSInvalidArgumentException' 导致错误终止应用程序,原因:'*** -[NSURL initFileURLWithPath:]: nil string parameter' 视频路径 NSLOg 是视频路径 /Users/malikwahajahmed/Library/Application Support/iPhone Simulator/4.2/Applications/18A4A444-9F5D-4910-91EE-237918F46CD0/Documents/17-04-2013|| 14:10:44.mov 用这个stringWithFormat:@"%@/%@.mov"代替这个stringWithFormat:@"%@/%@.mov"。而且我看不到编辑过的代码,你用旧代码恢复了吗? 评论这一行NSString *path = [[NSBundle mainBundle] pathForResource:videopath ofType:@"mov" inDirectory:nil];并再试一次..并在[NSURL initFileURLWithPath:]中将path替换为videopath 最后一次尝试。 [dateFormat setDateFormat:@"dd-MM-yyyy||HH:mm:SS"];,将格式化程序更改为@"dd-MM-yyyy_HH:mm:SS"【参考方案2】:

首先你需要在你的项目中添加mediaplayer框架,然后添加import语句

#import <MediaPlayer/MediaPlayer.h>

然后按照下面的代码进行

        MPMoviePlayerViewController *playerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:aVideoUrl]];



        // Register this class as an observer instead
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(movieFinishedCallback:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:playerVC.moviePlayer];


        // Set the modal transition style of your choice
        //playerVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

        [self presentMoviePlayerViewControllerAnimated:playerVC];
        [playerVC.moviePlayer prepareToPlay];
        [playerVC.moviePlayer play];
        [playerVC.moviePlayer setControlStyle:MPMovieControlStyleFullscreen];



- (void)movieFinishedCallback:(NSNotification*)aNotification

    // Obtain the reason why the movie playback finished
    NSNumber *finishReason = [[aNotification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];

    // Dismiss the view controller ONLY when the reason is not "playback ended"
    if ([finishReason intValue] != MPMovieFinishReasonPlaybackEnded)
    
        MPMoviePlayerController *moviePlayer = [aNotification object];

        // Remove this class from the observers
        [[NSNotificationCenter defaultCenter] removeObserver:self
                                                        name:MPMoviePlayerPlaybackDidFinishNotification
                                                      object:moviePlayer];

        // Dismiss the view controller
        [self dismissModalViewControllerAnimated:YES];
    

【讨论】:

以上是关于如何在 ipad 应用程序中播放文档文件夹中的视频文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 avplayer 从文档目录播放视频文件

使用 MPMoviePlayer 播放视频

如何在 Ionic 4 中通过 Airplay 在 iPad 和电视上播放视频

在 iPad 中观看 PDF 中的视频

如何使用 HTML 5 Web 应用程序在 iPad 上离线播放视频(使用 Sencha touch 或其他方式)

DVD视频转换无法播放?如何将DVD复制到iPad正常播放