2012-08-10 117 views
11

我想在AVPlayer中向後播放視頻。我已經嘗試將費率屬性更改爲-1.0,雖然它確實起作用,但並不順利。有什麼方法可以順利播放視頻嗎?iOS中的反向視頻播放

+4

的視頻播放是一件有趣的事情,因爲視頻在每X幀有關鍵幀,並且關鍵幀之間的幀都只是存儲的變化來自前一幀的圖像(不是整個幀)。因此,向後播放視頻不僅僅是改變幀的順序,因爲幀與前一幀(而不是下一幀)有關係,並且通常不改變幀的順序以獲得後向版本,大多數情況下你應該重新渲染視頻。這是視頻出現問題的一般原因。 – holex 2012-08-10 13:12:54

+0

非常有趣的問題。 – Daniel 2012-08-14 02:01:10

+1

謝謝。你能給我建議任何解決方案來反向播放視頻嗎? – 2012-08-24 09:49:14

回答

6

正如評論中所述,問題在於關鍵幀和大多數編解碼器不是爲了向後播放而設計的。有兩個選項可以對視頻進行重新編碼,而不需要您在編輯時實際上反轉視頻。

  1. 使每一幀都成爲關鍵幀。對於依賴關鍵幀的H.264等編解碼器,我已經看到了這一點。基本上,如果每一幀都是一個關鍵幀,那麼每一幀都可以被解碼而不依賴任何先前的幀,所以它與前進的效果相同。
  2. 使用不使用關鍵幀和非關鍵幀的編解碼器(基本上所有幀總是關鍵幀)。 PhotoJPEG就是這樣一種選擇,但我不完全確定它是否會在iOS上播放。我會這樣想的。它在Mac上很好用。

請注意,與典型的「每x幀關鍵幀」編碼視頻相比,這兩個選項中的任何一個都會導致較大的文件大小。

0

必須在當前項目結束時觸及,然後將速率設置爲負值。事情是這樣的:

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

來源:https://stackoverflow.com/a/16104363/701043