iOS獲取視頻截圖&縮略圖

寫在開(kāi)篇

周六需要測(cè)試各類視頻源和各種方法獲取縮略圖的時(shí)間,于是寫個(gè)小demo,簡(jiǎn)單查了下幾個(gè)相關(guān)帖子,不知道是不是我查詢的關(guān)鍵詞有問(wèn)題,結(jié)果太雜,有用的呢排版感覺(jué)又不夠友好,自己整理完就覺(jué)得還是發(fā)出來(lái)一下吧,畢竟多一份參考也是好的。話不多說(shuō)。上代碼。

獲取視頻截圖&縮略圖

#define k_THUMBNAIL_IMG_WIDTH  100//縮略圖及cell大小
#define k_FPS 1//一秒想取多少幀

//這本來(lái)是個(gè)異步調(diào)用,但寫成這種方便大家看和復(fù)制來(lái)直接測(cè)試
- (UIImage*)getVideoThumbnailWithUrl:(NSURL*)videoUrl  second:(CGFloat)second
{
    if (!videoUrl)
    {
        NSLog(@"WARNING:videoUrl為空");
        return nil;
    }
    AVURLAsset *urlSet = [AVURLAsset assetWithURL:videoUrl];
    AVAssetImageGenerator *imageGenerator = [AVAssetImageGenerator assetImageGeneratorWithAsset:urlSet];
    imageGenerator.appliesPreferredTrackTransform = YES;
    imageGenerator.apertureMode = AVAssetImageGeneratorApertureModeEncodedPixels;
    
    /*
     如果不需要獲取縮略圖,就設(shè)置為NO,如果需要獲取縮略圖,則maximumSize為獲取的最大尺寸。
     以BBC為例,getThumbnail = NO時(shí),打印寬高數(shù)據(jù)為:1920*1072。
     getThumbnail = YES時(shí),maximumSize為100*100。打印寬高數(shù)據(jù)為:100*55.
     注:不乘[UIScreen mainScreen].scale,會(huì)發(fā)現(xiàn)縮略圖在100*100很虛。
     */
    BOOL getThumbnail = YES;
    if (getThumbnail)
    {
        CGFloat width = [UIScreen mainScreen].scale * k_THUMBNAIL_IMG_WIDTH;
        imageGenerator.maximumSize =  CGSizeMake(width, width);
    }
    NSError *error = nil;
    CMTime time = CMTimeMake(second,k_FPS);
    CMTime actucalTime;
    CGImageRef cgImage = [imageGenerator copyCGImageAtTime:time actualTime:&actucalTime error:&error];
    if (error) {
        NSLog(@"ERROR:獲取視頻圖片失敗,%@",error.domain);
    }
    CMTimeShow(actucalTime);
    UIImage *image = [UIImage imageWithCGImage:cgImage];
    NSLog(@"imageWidth=%f,imageHeight=%f",image.size.width,image.size.height);
    CGImageRelease(cgImage);
    return image;
}

需要說(shuō)明的都大概寫了注釋,寫了個(gè)demo,點(diǎn)擊按鈕后,會(huì)將對(duì)應(yīng)片源每秒取k_FPS幀圖片,順序展示在collectionview上。
稍后會(huì)把demo發(fā)上來(lái),有問(wèn)題可以留言或者私信討論。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容