私は Cocoa アプリで AVPlayer を使用しており、ビデオの最後にジャンプするコマンドを実装しました。
問題は、AVPlayer が指定した場所に移動しないことです。
たとえば、私が持っているビデオの 1 つは 4 分 14 秒の長さです。最後までシークすると、AVPlayer は 4 分 12 秒までシークします。2 秒短いのです。次に再生を押すと、プレーヤーは 2 秒間再生し、最後に到達します。
私の最初の試みはこれでした:
[self.player seekToTime:self.player.currentItem.duration];
私はこれに切り替えました:
[self.player seekToTime:self.player.currentItem.duration
toleranceBefore:kCMTimePositiveInfinity
toleranceAfter:kCMTimeZero];
どちらも他よりもうまく機能しません。
も求めてみましたkCMTimePositiveInfinity
。それはちょうど私を無視しました。
プレーヤーがビデオのその部分をまだ読み込んでいるかどうかは問題ではないようです。途中までシークし、真の最後まで再生してから、もう一度最後までシークを試みると、最後まで戻ってジャンプすることさえできます。
不足は常に 2 秒ではありません。私のビデオのいくつかでは、それは多かれ少なかれ正確に機能し、正確ではないにしても、真の終わりに非常に近くジャンプします. 少なくとも 1 つは、3 秒短くなります。長さは重要ではないようです。これらはすべてほぼ同じ長さですが、1 時間以上の長さで 2 秒短くしようとしている 1 つを除きます。
では、なぜ AVPlayer は、私が指示した場所から 3 秒もジャンプしないのでしょうか? また、私が要求した瞬間にジャンプするように説得するにはどうすればよいでしょうか?