2012-05-25 31 views
0

我正在製作一個應用程序,從服務器下載電影並將它們存儲在本地的NSDocumentDirectory中。MPMoviePlayerController生成本地視頻文件的縮略圖並存儲它

這工作正常。

我想在每個單元格的名稱前添加每個電影生成的縮略圖。

我的問題:

我如何能在一個電影在下載後的縮略圖(所以瞬間,而不必首先播放的電影)?我想在NSDocumentDirectory中將與縮略圖相同名稱的縮略圖存儲爲jpg。

我的猜測

-download電影並將其存儲在NSDocumentDirectory(作品)

-somehow加載影片中的MPMoviePlayerController的內存(不知道如何)

- 當加載在內存中,生成縮略圖thumbnailImageAtTime(MPMovieTimeOptionNearestKeyFrame)(應該工作)

- 存儲它(應該工作)

如果有人可以幫助我...

感謝

回答

5
#import <MediaPlayer/MediaPlayer.h> 


-(UIImage*)getFirstFrameFromVideoFile:(NSString*)sourceFilePath { 
NSURL *videoURL = [NSURL fileURLWithPath:sourceFilePath]; 

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 

UIImage *thumbnail = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame]; 
//Player autoplays audio on init 
[player stop]; 
[player release]; 
return thumbnail; 
} 

其他任務你已經知道了。

+0

這是行不通的。我認爲問題在於電影必須先加載到內存中。雖然我不知道該怎麼做。 –

+0

** sourceFilePath **是NSDocumentDirectory路徑,其中存儲視頻文件的物理位置。 –

+0

儘管縮略圖圖像返回(數據長度)爲0,所以沒有創建縮略圖... –

1

這是我使用它應該產生縮略圖 代碼(畫了一個大大的UIImageView進行測試,工作時,我在它加載本地圖像)

NSString *path; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"snijtechniekendir/videos"]; 
    path = [path stringByAppendingPathComponent:[videos objectAtIndex:indexPath.row]]; 

    NSURL *videoURL = [NSURL fileURLWithPath:path]; 

    NSLog(@"video url: %@", videoURL); 

    MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:videoURL]; 

    UIImage *thumbnail = [player thumbnailImageAtTime:1 timeOption:MPMovieTimeOptionNearestKeyFrame]; 

    UIImageView *cellimage = [[UIImageView alloc] initWithFrame:CGRectMake(2, 2 , 400, 400)]; 

    [cell.contentView addSubview:cellimage]; 
    NSData *imgData = UIImagePNGRepresentation(thumbnail); 
    NSLog(@"lenght of video thumb: %@", [imgData length]); 
    [self.view addSubview:cellimage]; 
    [cellimage setImage:thumbnail]; 

這是日誌爲一個視頻文件

video url: file://localhost/Users/Home/Library/Application%20Support/iPhone%20Simulator/5.1/Applications/78C165BB-75A9-46A2-A257-469F8652A665/Documents/snijtechniekendir/videos/snijtechniek%2520brunoise.mp4 

lenght of video thumb: (null) 
3

是的,使用MPMoviePlayer的工作原理......但您必須確保您的應用程序中沒有其他電影播放器​​(即使是UIWebView插件...),否則您將遇到麻煩。 我這樣做是這樣的:

UIImage *thumbnail = nil; 
NSURL *url = [NSURL fileURLWithPath:pathname]; 
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:nil]; 
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:asset]; 
generator.appliesPreferredTrackTransform = YES; 
NSError *error = nil; 
CMTime time = CMTimeMake(3, 1); // 3/1 = 3 second(s) 
CGImageRef imgRef = [generator copyCGImageAtTime:time actualTime:nil error:&error]; 
if (error != nil) 
    NSLog(@"%@: %@", self, error); 
thumbnail = [[UIImage alloc] initWithCGImage:imgRef]; 
CGImageRelease(imgRef); 

希望這可以幫助

+0

以上的答案中加入了一些更多信息!謝謝 –