在加载资产后立即在AVPlayer中寻找某个位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在加载资产后立即在AVPlayer中寻找某个位置相关的知识,希望对你有一定的参考价值。

这有效:我有一个AVPlayer,它在加载后立即播放视频。这很好用。

这不是:

我想在一个给定的位置播放它,而不是在开始时播放视频。所以我等到资产准备好使用KVO播放:

BOOL isReadyToSeek = (self.playerItem.status == AVPlayerStatusReadyToPlay)

然后寻求给定的时间

[playerItem seekToTime:timeInTheMiddleOfTheVideo completionHandler:myHandler];

但是玩家将始终在视频开始时进行初始搜索。

更新我尝试了几秒钟的dispatch_after,但这也不起作用。它在播放后工作,但从不开始。

当我观察self.player.currentItem.duration时,我一直将0作为valuetimescale

答案

有些事情可以帮到你:

  1. 当检查玩家是否准备好玩时,我同时检查玩家本身以及玩家的当前项目。 if(self.player.status == AVPlayerStatusReadyToPlay && self.player.currentItem.status == AVPlayerItemStatusReadyToPlay) { [self.player play]; }
  2. 如果您寻求例如15秒,它可能从视频的开头开始,而不是最近的关键帧的位置。要强制玩家寻找确切的位置(注意:这需要几秒钟才能完成),请执行以下操作: Float64 seconds = 500.0f; CMTime targetTime = CMTimeMakeWithSeconds(seconds, NSEC_PER_SEC); [self.player seekToTime:targetTime toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; 或者,您可以通过将其中一个参数指定为无穷大来明确地在指定点之前/之后搜索关键帧: [self.player seekToTime:targetTime toleranceBefore:kCMTimePositiveInfinity toleranceAfter:kCMTimeZero];

以上是关于在加载资产后立即在AVPlayer中寻找某个位置的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayer 不会在 iOS 10 上立即播放视频,而仅播放音频

在 AVPlayer 中播放网络不佳的流

屏幕加载时AVPLayer显示黑屏

Objective-C 如何立即在 MPMoviePlayerController 或 AVPlayer 上播放视频,没有延迟?

设置 AVPlayer AVPlayerItem 缓冲区大小?

如何从 AVPlayer 中的 mpd 文件中提取字幕?