2012-08-10 12 views
11

Desidero riprodurre il video indietro in AVPlayer. Ho provato a modificare la proprietà dei tassi a -1.0 e, sebbene funzionasse, non era fluido. C'è un modo attraverso il quale posso riprodurre i video senza problemi?Riproduzione video inversa in iOS

+4

la riproduzione del video è una cosa interessante, perché il video ha fotogrammi chiave ad ogni fotogramma X, e le cornici tra i fotogrammi chiave sono solo memorizzare i cambiamenti del immagine dal fotogramma precedente (non l'intero fotogramma). quindi riprodurre un video non significa solo cambiare l'ordine dei fotogrammi, perché i fotogrammi sono in relazione con il precedente (non con il prossimo!) e, in generale, non si cambia l'ordine dei fotogrammi per ottenere la versione precedente, la maggior parte dei casi dovresti ri-renderizzare nuovamente il video. questo è il motivo generico per cui hai problemi con i video. – holex

+0

Domanda molto interessante. – Daniel

+1

Grazie. Potete per favore suggerirmi qualche soluzione per la riproduzione al contrario del video? –

risposta

6

Come indicato nei commenti, il problema è con i fotogrammi chiave e il fatto che la maggior parte dei codec non sono progettati per riprodurre all'indietro. Ci sono 2 opzioni per ricodificare il video che non richiede di invertire effettivamente il video in modifica.

  1. Imposta ogni fotogramma come fotogramma chiave. Ho visto questo funziona bene per i codec come H.264 che si basano su keyframes. Fondamentalmente se ogni fotogramma è un fotogramma chiave, ogni fotogramma può essere decodificato senza fare affidamento su nessun fotogramma precedente, quindi è effettivamente lo stesso della riproduzione in avanti.
  2. Utilizzare un codec che non utilizza fotogrammi chiave e non keyframe (in pratica tutti i fotogrammi sono sempre fotogrammi chiave). PhotoJPEG è una di queste opzioni, anche se non sono completamente sicuro che riproduca su iOS. Lo penserei. Funziona benissimo su un Mac.

Si noti che entrambe le opzioni risulteranno in file di dimensioni maggiori rispetto al tipico video codificato "fotogramma chiave ogni x fotogrammi".

0

È necessario raggiungere alla fine della voce corrente e quindi impostare la velocità sul valore negativo. Qualcosa di simile a questo:

-(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"); }

fonte: https://stackoverflow.com/a/16104363/701043

Problemi correlati