2

imagePickerControllerを使用してビデオを録画しています。imagePickerController:didFinishPickingMediaWithInfo:関数で、ビデオを以前に定義されたMPMoviePlayerControllerに設定しようとしています。

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

これは正常に機能しており、ビデオは実際に再生されています。しかし、後で使用するためにファイルを保存したいと思います。これを実行して、保存されたファイルを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]];
    
  • またはこれ(一時ビデオファイルを私のドキュメントフォルダにコピーする)

    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]];
    

のファイルが存在していても、成功しnewPathませんでした...何が間違っているのですか?

4

2 に答える 2

10

わかりました、私はついに問題を見つけました。問題は実際にはMPMoviePlayerControllerではなく、次の行にありました。

[self.moviePlayer setContentURL:[NSURL URLWithString:newPath]];

その行を次のように置き換えることで修正しました。

[self.moviePlayer setContentURL:[NSURL fileURLWithPath:newPath isDirectory:NO]];

それが他の誰かを助けることを願っています!

于 2012-04-30T15:11:50.797 に答える
1

以下のコードを使用してください。

NSData *movieData;  
    NSError *dataReadingError = nil;        
    movieData = [NSData dataWithContentsOfURL: movieURL options:NSDataReadingMapped error:&dataReadingError];        
    if(movieData != nil)        
        NSLog(@"Successfully loaded the data.");   
    else        
        NSLog(@"Failed to load the data with error = %@", dataReadingError); 
于 2012-05-08T06:18:32.497 に答える