iOS: AVPlayerItem seekToTime 不寻找请求的确切时间
iOS: AVPlayerItem seekToTime not seeking to exact time requested
我正在开发一个通过 HTTP 流式传输视频的应用程序。 AVPlayer 用于播放视频。我正在使用 AVPlayerItem 和 selectMediaOption 方法在特定视频流之间切换(源中有三个流)。
我的问题是,当我在媒体选项之间切换时,我调用 seekToTime: toleranceBefore: toleranceAfter:
将新视频跳过到与我正在切换的视频相同的时间点。问题是,这不能可靠地工作。尽管 AVPlayerItem currentTime 属性 报告了我请求的时间,但视频通常会跳到请求时间前几秒的点。我正在为 toleranceBefore 和 toleranceAfter 传递 kCMTimeZero。
其他值得一提的是,这只发生在一个特定的媒体流上。我有另一个没有出现问题的媒体流。
任何人都可以提出这里可能存在的问题吗?
事实证明,这个问题与 API 或它们的使用方式没有任何关系。看起来用于创建视频片段的编码器在生成的文件中产生了错误。
ffprobe报错如下:
[h264 @ 00000249a4348980] decode_slice_header error
[h264 @ 00000249a4348980] no frame!
[h264 @ 00000249a4348980] non-existing PPS 0 referenced
我不确定用于创建我正在使用的视频片段的原始工具是什么,但我已经证实 Apple 的 mediafilesegmenter 也会导致错误。
我通过使用 ffmpeg 对片段进行编码解决了错误。
我正在开发一个通过 HTTP 流式传输视频的应用程序。 AVPlayer 用于播放视频。我正在使用 AVPlayerItem 和 selectMediaOption 方法在特定视频流之间切换(源中有三个流)。
我的问题是,当我在媒体选项之间切换时,我调用 seekToTime: toleranceBefore: toleranceAfter:
将新视频跳过到与我正在切换的视频相同的时间点。问题是,这不能可靠地工作。尽管 AVPlayerItem currentTime 属性 报告了我请求的时间,但视频通常会跳到请求时间前几秒的点。我正在为 toleranceBefore 和 toleranceAfter 传递 kCMTimeZero。
其他值得一提的是,这只发生在一个特定的媒体流上。我有另一个没有出现问题的媒体流。
任何人都可以提出这里可能存在的问题吗?
事实证明,这个问题与 API 或它们的使用方式没有任何关系。看起来用于创建视频片段的编码器在生成的文件中产生了错误。
ffprobe报错如下:
[h264 @ 00000249a4348980] decode_slice_header error
[h264 @ 00000249a4348980] no frame!
[h264 @ 00000249a4348980] non-existing PPS 0 referenced
我不确定用于创建我正在使用的视频片段的原始工具是什么,但我已经证实 Apple 的 mediafilesegmenter 也会导致错误。
我通过使用 ffmpeg 对片段进行编码解决了错误。