2016-09-13 9 views
1

Кажется достаточно простым. Я просто хочу миниатюру от 5 секунд в видео:AVAssetImageGenerator - Создайте эскиз за 5 секунд

AVURLAsset *asset1 = [[AVURLAsset alloc] initWithURL:[NSURL URLWithString:url] options:nil]; 
AVAssetImageGenerator *generate1 = [[AVAssetImageGenerator alloc] initWithAsset:asset1]; 
generate1.appliesPreferredTrackTransform = YES; 
NSError *err = NULL; 
Float64 seconds = 5; 
int32_t preferredTimeScale = 30; 
CMTime actualTime; 
CMTime inTime = CMTimeMakeWithSeconds(seconds, preferredTimeScale); 
CMTimeShow(inTime); 
CGImageRef oneRef = [generate1 copyCGImageAtTime:inTime actualTime:&actualTime error:&err]; 

Выход заключается в следующем:

Printing description of actualTime: 
(CMTime) actualTime = 83 1000ths of a second { 
    value = 83 
    timescale = 1000 
    flags = kCMTimeFlags_Valid 
    epoch = 0 
} 
Printing description of inTime: 
(CMTime) inTime = 150 30ths of a second { 
    value = 150 
    timescale = 30 
    flags = kCMTimeFlags_Valid 
    epoch = 0 
} 

Почему actualTime отличается от inTime ??? Как я могу получить изображение через 5 секунд в видео?

+0

Возможно, видео не слишком короткое? – Avt

+0

Да, видеоролик длится 3 минуты. – soleil

+0

Не могли бы вы добавить в сообщение значение 'asset1.duration'? – Avt

ответ

0

Попытка использовать requestedTimeToleranceBefore и requestedTimeToleranceAfter:

generate1.requestedTimeToleranceBefore = kCMTimeZero 
generate1.requestedTimeToleranceAfter = kCMTimeZero 

уаг requestedTimeToleranceBefore: CMTime

Максимальная длина времени до запрашиваемого времени, в течение которого изображение может быть сгенерирован.

вар requestedTimeToleranceAfter: CMTime

Максимальная длина времени после запрашиваемого времени, в течение которого изображение может быть сгенерирован.

+0

Это не поможет: 'Описание Печать ActualTime: (CMTime) ActualTime = { значение = 6143422688 Временные рамки = 0 флаги = 0 эпоха = 4320052688 }' – soleil