2

AVPlayerItem の stepByCount メソッドを実装して、フレームごとにビデオを手動で処理しました。1歩進むとこんな感じ。

    AVPlayer *player = [AVPlayer playerWithURL:url];
    [player.currentItem stepByCount:1];

そして1歩後退

    AVPlayer *player = [AVPlayer playerWithURL:url];
    [player.currentItem stepByCount:-1];

1 ステップ進む (フレームごとに時間的に進む) はうまく機能します。ただし、フレームごとに後方に移動しようとすると、前方のステップほどスムーズではありません。何か不足していますか?それとも、ビデオがエンコードされている方法が原因でしょうか?つまり、ビデオは、逆方向ではなく、順方向に表示されることを意図しています。

4

2 に答える 2

3

AVPlayerItem がステッピングをサポートしているかどうかを確認できます。

if (playerItem.canStepBackward)
{
    [playerItem stepByCount:numberOfFrames];
}
else
{
    // Do our best here...
    [player seekToTime:CMTimeSubtract(player.currentTime, CMTimeMake(ABS(numberOfFrames)*1000, compositionFPS*1000)) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];
}
于 2014-12-15T19:58:15.230 に答える