iphone sdk > 3.0 . Video Thumbnail?

后端 未结 7 849
死守一世寂寞
死守一世寂寞 2020-12-02 12:45

From what i have read apple doesnt expose the api to allow developers to get a thumbnail of a movie using the current sdk.

Can any one share some code as to how the

7条回答
  •  生来不讨喜
    2020-12-02 13:29

    Hope my code could help you guys. It's ugly. I think apple should open this kind of APIs. Of course, all NSLog() should be removed. It's just for demonstration.

    alvin

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
     // e.g.
     NSString *tempFilePath = [(NSURL *)[info valueForKey:UIImagePickerControllerMediaURL] absoluteString];
     NSLog(@"didFinishPickingMediaWithInfo: %@",tempFilePath);
     // e.g. /private/var/mobile/Applications/D1E784A4-EC1A-402B-81BF-F36D3A08A332/tmp/capture/capturedvideo.MOV
     tempFilePath = [[tempFilePath substringFromIndex:16] retain];
     NSLog(@"didFinishPickingMediaWithInfo: %@",tempFilePath);
     NSLog(@"===Try to save video to camera roll.===");
     NSLog(@"UIVideoAtPathIsCompatibleWithSavedPhotosAlbum: %@",UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(tempFilePath)? @"YES":@"NO");
     // Check if the video file can be saved to camera roll.
        if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(tempFilePath)){
      // YES. Copy it to the camera roll.
      UISaveVideoAtPathToSavedPhotosAlbum(tempFilePath, self, @selector(video:didFinishSavingWithError:contextInfo:), tempFilePath);
     }
    
     [self dismissModalViewControllerAnimated:YES];
    }
    
    - (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(NSString *)contextInfo{
     NSLog(@"didFinishSavingWithError--videoPath in camera roll:%@",videoPath);
     NSLog(@"didFinishSavingWithError--videoPath in temp directory:%@",contextInfo);
     // The thumbnail jpg should located in this directory.
     NSString *thumbnailDirectory = [[contextInfo stringByDeletingLastPathComponent] stringByDeletingLastPathComponent];
    
     // Debug info. list all files in the directory of the video file.
     // e.g. /private/var/mobile/Applications/D1E784A4-EC1A-402B-81BF-F36D3A08A332/tmp/capture
     NSLog([contextInfo stringByDeletingLastPathComponent]);
     NSLog([[[NSFileManager defaultManager] contentsOfDirectoryAtPath:[contextInfo stringByDeletingLastPathComponent] error:nil] description]);
     // Debug info. list all files in the parent directory of the video file, i.e. the "~/tmp" directory.
     // e.g. /private/var/mobile/Applications/D1E784A4-EC1A-402B-81BF-F36D3A08A332/tmp
     NSLog(thumbnailDirectory);
     NSLog([[[NSFileManager defaultManager] contentsOfDirectoryAtPath:thumbnailDirectory error:nil] description]);
     ///////////////////
    
     // Find the thumbnail for the video just recorded.
     NSString *file,*latestFile;
     NSDate *latestDate = [NSDate distantPast];
     NSDirectoryEnumerator *dirEnum = [[NSFileManager defaultManager] enumeratorAtPath:[[contextInfo stringByDeletingLastPathComponent]stringByDeletingLastPathComponent]];
     // Enumerate all files in the ~/tmp directory
     while (file = [dirEnum nextObject]) {
      // Only check files with jpg extension.
      if ([[file pathExtension] isEqualToString: @"jpg"]) {
       NSLog(@"***latestDate:%@",latestDate);
       NSLog(@"***file name:%@",file);
       NSLog(@"***NSFileSize:%@", [[dirEnum fileAttributes] valueForKey:@"NSFileSize"]);
       NSLog(@"***NSFileModificationDate:%@", [[dirEnum fileAttributes] valueForKey:@"NSFileModificationDate"]);
       // Check if current jpg file is the latest one.
       if ([(NSDate *)[[dirEnum fileAttributes] valueForKey:@"NSFileModificationDate"] compare:latestDate] == NSOrderedDescending){
        latestDate = [[dirEnum fileAttributes] valueForKey:@"NSFileModificationDate"];
        latestFile = file;
        NSLog(@"***latestFile changed:%@",latestFile);
       }
      }
     }
     // The thumbnail path.
     latestFile = [NSTemporaryDirectory() stringByAppendingPathComponent:latestFile];
     NSLog(@"****** The thumbnail file should be this one:%@",latestFile);
    
     // Your code ...
     // Your code ...
     // Your code ...
    }
    

提交回复
热议问题