Ios 如何寻找AVPlayer的最后一帧

Ios 如何寻找AVPlayer的最后一帧,ios,media-player,avplayer,http-live-streaming,Ios,Media Player,Avplayer,Http Live Streaming,是否可以搜索到HLS视频的最后一帧?每当我寻找时间(等于当前项目的持续时间)时,我总是在距离最终目的地稍早的位置结束。我甚至尝试在寻找时在宽容前后使用零,但都不起作用 如何以编程方式在AVPlayer中查找视频结尾?您必须将后的公差更改为正无穷大。 这里有更多的细节,我不确定这是否有帮助,但我遇到了一个类似的问题 我的任务是寻找由AVPlayer播放的视频的最后一帧 我通过查找AVPlayer实例的当前项的持续时间值来实现这一点。但是,在运行下面的代码 AVPrabor 显示了空白帧而不是视频的

是否可以搜索到HLS视频的最后一帧?每当我寻找时间(等于当前项目的持续时间)时,我总是在距离最终目的地稍早的位置结束。我甚至尝试在寻找时在宽容前后使用零,但都不起作用


如何以编程方式在
AVPlayer
中查找视频结尾?

您必须将
后的公差更改为正无穷大。

这里有更多的细节,我不确定这是否有帮助,但我遇到了一个类似的问题

我的任务是寻找由
AVPlayer
播放的视频的最后一帧

我通过查找
AVPlayer
实例的当前项的持续时间值来实现这一点。但是,在运行下面的代码<代码> AVPrabor <代码>显示了空白帧而不是视频的最后一帧。

guard let duration = player?.currentItem?.asset.duration else {
  return
}
    
player?.seek(to: duration, toleranceBefore: .zero, toleranceAfter: .zero)
最后,我希望找到问题的原因

我们应该考虑到,
AVAsset
实例可以同时包含视频和音频曲目(通常是单个视频曲目和单个音频曲目),并且可能存在音频曲目持续时间大于视频曲目持续时间的情况。 因此,我们应该获得
AVAsset
的视频曲目的持续时间(
AVAssetTrack
实例具有适当的属性
timeRange
),并使用它来查找
AVPlayer
的最后一帧。 下面的代码解决了我的问题

guard let firstVideoTrack = player?.currentItem?.asset.tracks(withMediaType: .video).first else {
  return
}
    
let duration = firstVideoTrack.timeRange.duration
    
player?.seek(to: duration, toleranceBefore: .zero, toleranceAfter: .zero)
当音频曲目在视频曲目之前开始,或者单个资源中有多个视频和/或音频曲目时,可能会出现更复杂的情况。在这种情况下,请检查
AVAssetTrack
time range
struct的
start
属性,并执行相应的操作


还请记住,一些
AVAsset
字段(例如,
曲目
)是异步加载的。确保在阅读前使用
AVAsset的
loadvaluesasynchronous(forKeys:completionHandler:)
方法加载它们。

不幸的是,这对我不起作用。如果我将后公差设置为正无穷大,结果会更糟。你试过这个吗?