1

ユーザーがアプリ内でビデオを録画し、後でもう一度再生できるようにします。ユーザーがビデオを録画すると、ビデオの URL を保存し、後で保存した URL からビデオを再生します。写真アプリと自分のアプリの両方にビデオを保存します。写真アプリ内でビデオを削除しても、まだ再生されます。約 7 日後に、ビデオは削除されます。tmp ディレクトリに保存していると思いますが、よくわかりません。これが私がやっていることです:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {


    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
    [self dismissViewControllerAnimated:YES completion:nil];
    // Handle a movie capture
    if (CFStringCompare ((__bridge_retained CFStringRef) mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo) {
        NSString *moviePath = [NSString stringWithFormat:@"%@",[[info objectForKey:UIImagePickerControllerMediaURL] path]];
        NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
        NSData *videoData = [NSData dataWithContentsOfURL:videoURL];
        _justRecordedVideoURL = [NSString stringWithFormat:@"%@",videoURL];

        AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
        _managedObjectContext = [appDelegate managedObjectContext];
        Video *video = [NSEntityDescription insertNewObjectForEntityForName:@"Video" inManagedObjectContext:_managedObjectContext];

        [video setVideoData:videoData];
        [video setVideoURL:[NSString stringWithFormat:@"%@",videoURL]];

        NSError *error = nil;
        if(![_managedObjectContext save:&error]){
            //handle dat error
        }


        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *tempPath = [documentsDirectory stringByAppendingFormat:@"/vid1.mp4"];

        BOOL success = [videoData writeToFile:tempPath atomically:NO];

        if(success == FALSE){
            NSLog(@"Video was not successfully saved.");
        }

        if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(moviePath)) {
            UISaveVideoAtPathToSavedPhotosAlbum(moviePath, self,
                                                @selector(video:didFinishSavingWithError:contextInfo:), nil);

        }
    }
}

間違って保存していませんか?ビデオを再生しようとすると、問題なく動作します。数日後、ビデオはオーディオなしで再生され、最終的にはなくなります。理由はありますか?

4

1 に答える 1

1

Core Data プログラミング ガイドでは、大きすぎる BLOB を Core Data に保存しないように具体的に指摘しています。サムネイルは問題ありませんが、大きな画像や動画は避けてください。

ローカルビデオの URL を Core Data に、たとえば一意の名前で保存し、ビデオをドキュメント ディレクトリに保存することをお勧めします。ここで、最初に Core Data に保存してから、core data 属性をファイルに書き込みます。データをローカル ファイルに直接書き込むことをお勧めします。

コードを単純化するようにしてください。明確な理由もなく、事実上同じ変数が何度も保存されています (たとえば、URL と同じ URL の文字列の変形: moviePathvideoURL_justRecordedVideoURL)。

パターン[NSString stringWithFormat@"%@", string]は意味がありません。
パターン[NSString sringWithFormat@"%@", url]は次のように記述した方が適切です[url path]

于 2013-10-21T06:49:46.060 に答える