MPMoviePlayerController不播放新保存的视频文件

Joh*_*ann 2 iphone video mpmovieplayercontroller uiimagepickercontroller ios

我正在使用imagePickerController来录制视频.在imagePickerController:didFinishPickingMediaWithInfo:函数中我试图将视频设置为先前定义的MPMoviePlayerController:

if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]){
    NSURL *movieUrl = [info objectForKey:UIImagePickerControllerMediaURL];
    [self.moviePlayer setContentURL:movieUrl]];
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,视频确实在播放.但我想保存文件供以后使用.当我这样做并将保存的文件用于moviePlayer时,没有任何反应:

  • 我试过这个(将数据保存到新文件)

    NSString *directory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *newPath = [directory stringByAppendingPathComponent:@"myMovie.mov"];
    NSData *videoData = [NSData dataWithContentsOfURL:movieUrl];
    [videoData writeToFile:newPath atomically:NO];
    [self.moviePlayer setContentURL:[NSURL URLWithString:newPath]];
    
    Run Code Online (Sandbox Code Playgroud)
  • 或者这个(将临时视频文件复制到我的文档文件夹)

    NSString *directory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *newPath = [directory stringByAppendingPathComponent:@"myMovie.mov"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error = nil;
    [fileManager copyItemAtPath:[videoUrl path] toPath:newPath error:&error];
    [self.moviePlayer setContentURL:[NSURL URLWithString:newPath]];
    
    Run Code Online (Sandbox Code Playgroud)

没有任何成功,即使文件newPath确实存在......我做错了什么?

Joh*_*ann 10

好的,我终于找到了这个问题.问题实际上不是MPMoviePlayerController,而是使用以下行:

[self.moviePlayer setContentURL:[NSURL URLWithString:newPath]];
Run Code Online (Sandbox Code Playgroud)

我通过用以下代码替换该行来修复它:

[self.moviePlayer setContentURL:[NSURL fileURLWithPath:newPath isDirectory:NO]];
Run Code Online (Sandbox Code Playgroud)

希望能帮助别人!

  • @Johann如果我是上帝,你会为这个职位而去天堂.谢谢. (2认同)