1

我正在开发一个通过 HTTP 流式传输视频的应用程序。AVPlayer 用于播放视频。我正在使用 AVPlayerItem 和 selectMediaOption 方法在特定视频流之间切换(源中有三个流)。

我的问题是,当我在调用的媒体选项之间切换seekToTime: toleranceBefore: toleranceAfter:以将新视频跳过到与我正在切换的视频相同的时间点时。问题是,这不能可靠地工作。即使 AVPlayerItem currentTime 属性报告了我请求的时间,视频通常也会跳到请求时间前几秒的位置。我将 kCMTimeZero 传递给toleranceBefore 和toleranceAfter。

值得一提的是,这只发生在一个特定的媒体流上。我有另一个没有出现问题的媒体流。

任何人都可以提出这里可能出现的问题吗?

4

1 回答 1

1

事实证明,这个问题与 API 或它们的使用方式没有任何关系。看起来用于创建视频片段的编码器在生成的文件中产生了错误。

ffprobe 报告的错误如下:

[h264 @ 00000249a4348980] decode_slice_header error
[h264 @ 00000249a4348980] no frame!
[h264 @ 00000249a4348980] non-existing PPS 0 referenced

我不确定用于创建我正在使用的视频片段的原始工具是什么,但我已经验证了 Apple 的 mediafilesegmenter 也会导致错误。

我通过使用 ffmpeg 对段进行编码来解决该错误。

于 2016-04-21T08:48:04.153 回答