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