iOS獲取視頻縮略圖

前提:先添加AVFoundation和CoreMedia兩個框架。

一 、利用MPMoviePlayerController實現

核心方法:

獲取在指定播放時間的視頻縮略圖

-(void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option;

第一個參數是獲取縮略圖的時間點數組
第二個參數代表時間點精度,枚舉類型:

  • MPMovieTimeOptionNearestKeyFrame:時間點附近
  • MPMovieTimeOptionExact:準確時間
相關方法:
  • 取消所有縮略圖獲取請求
-(void)cancelAllThumbnailImageRequests;
  • 縮略圖請求完成之后的通知
MPMoviePlayerThumbnailImageRequestDidFinishNotification

二 、利用AVFoundation實現

思路:
  1. 創建AVURLAsset對象(此類主要用于獲取媒體信息,包括視頻、聲音等)。
  2. 根據AVURLAsset創建AVAssetImageGenerator對象。
  3. 使用AVAssetImageGenerator的copyCGImageAtTime::方法獲得指定時間點的截圖。
參考代碼:
+(UIImage *)getThumbnailImage:(NSString *)videoPath {    
    if (videoPath) {
        AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath: videoPath] options:nil];        
        AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];        
        // 設定縮略圖的方向,如果不設定,可能會在視頻旋轉90/180/270°時,獲取到的縮略圖是被旋轉過的,而不是正向的。
        gen.appliesPreferredTrackTransform = YES;    
        // 設置圖片的最大size(分辨率)
        gen.maximumSize = CGSizeMake(300, 169);  
        CMTime time = CMTimeMakeWithSeconds(5.0, 600); // 取第5秒,一秒鐘600幀  
        NSError *error = nil; 
        CMTime actualTime;
        CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];   
        if (error) {
            UIImage *placeHoldImg = [UIImage imageNamed:@"<默認圖片名>"];
            return placeHoldImg;
        }    
        UIImage *thumb = [[UIImage alloc] initWithCGImage:image];  
        CGImageRelease(image); 
        return thumb;     
    } else { 
         UIImage *placeHoldImg = [UIImage imageNamed:@"<默認圖片名>"];
        return placeHoldImg;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容