5

我正在开发一个使用HTTP Live Streaming技术播放视频的应用程序。
为此,我使用AVPlayer,其初始化如下:

[[AVPlayer alloc] initWithURL:[NSURL URLWithString:VIDEO_URL]];

然后我检查缓冲区的状态,self.player.currentItem.loadedTimeRanges并在我的自定义视图上显示这个范围。

问题是,当在 加载的区域中倒带时[self.player seekToTime:timeToSeek toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];,加载视频就像它不在缓冲区中一样开始。

4

2 回答 2

3

首先,我的回答假设您使用 HTTP Live Streaming 作为静态 m3u8 列表,否则在视频中搜索将没有多大意义。

可能的原因

HTTP Live Streaming 使用嵌入子播放列表的 m3u 样式播放列表。每个子播放列表显示不同的视频质量,AVPlayer 根据网络速度选择使用哪一个。

但是,根据Apple 的文档,当播放器最初开始播放时,它首先选择第一个子播放列表,并且只有在播放了几个 ts 文件后,它才会选择适当的子播放列表,如上所述。

因此,当您搜索某个时间时,播放器可能首先尝试播放未缓存的第一个子列表。

建议的解决方案

尝试以下操作:

  1. 将 m3u8 流更改为只有一个子流。
  2. 使用 kCMTimeZero 以外的值作为容差,即CMTimeMake(30, 60)
  3. 监控网络调用以查看播放器下载的具体内容以及何时下载,例如,您可以使用Charles 代理
于 2014-04-01T09:19:13.510 回答
1

尝试使用iOS 开发人员库中提供的示例代码StitchedStreamPlayer来回答您的问题。

于 2014-04-01T13:02:43.947 回答