Обратное воспроизведение видео в iOS

Я хочу воспроизвести видео в AVPlayer. Я попытался с изменением свойства тарифов на -1.0, и хотя он работал, он не был гладким. Есть ли способ, с помощью которого я могу плавно воспроизводить видео назад?

Ответ 1

Как отмечается в комментариях, проблема связана с ключевыми кадрами и тем фактом, что большинство кодеков не предназначены для воспроизведения назад. Существует 2 варианта повторного кодирования видео, которое не требует фактического изменения видео в процессе редактирования.

  1. Сделайте каждый кадр ключевым фреймом. Я видел эту работу хорошо для кодеков, таких как H.264, которые полагаются на ключевые кадры. В принципе, если каждый кадр является ключевым фреймом, каждый кадр может быть декодирован, не полагаясь на какие-либо предыдущие фреймы, поэтому он фактически будет таким же, как воспроизведение вперед.
  2. Используйте кодек, который не использует ключевые кадры и не-ключевые кадры (в основном все кадры всегда являются ключевыми кадрами). PhotoJPEG - один из таких вариантов, хотя я не совсем уверен, что он воспроизводит iOS. Я бы так подумал. Он отлично работает на Mac.

Обратите внимание, что любой из этих параметров приведет к большему размеру файла по сравнению с обычным кодированным видеофрагментом "keyframe every x frames".

Ответ 2

Вы должны достигнуть в конце текущего элемента, а затем установить скорость на отрицательное значение. Что-то вроде этого:

-(void)reversePlay { CMTime durTime = myPlayer.currentItem.asset.duration; if (CMTIME_IS_VALID(durTime)) { [myPlayer seekToTime:durTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; [myPlayer setRate:-1.0]; } else NSLog(@"Invalid time"); }

источник: fooobar.com/info/1075406/...