AVPlayer在HLS音频流中寻找错误的位置

时间:2017-08-22 20:49:48

标签: ios audio stream avplayer hls

我正在尝试使用AVPlayer播放HLS音频流。一切正常,但是当我寻找玩家时,玩家的当前时间会进入错误的位置。

如果我想寻找38s,在执行搜索功能之后,我在查找完成处理程序内打印的currentTime给了我10s,例如.. 大多数时候,玩家在寻求之后从不同的位置开始。

以下是我使用的代码:

let cmTime = CMTime(seconds: validTime, preferredTimescale: CMTimeScale(NSEC_PER_SEC))
self.player.seek(to: cmTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero, completionHandler: {  (finished) in
     self.player.currentTime().seconds
})

我看到AVFoundation无法正常使用VBR文件,但我的所有文件都是CBR。它们都具有128kb / s的恒定比特率。我将.mp3文件分割为一些.ts文件也可以作为流媒体播放。

我想知道是否有人有解决此问题或任何可以帮助我解决此问题的解决方法。

谢谢你们,伙计们!

1 个答案:

答案 0 :(得分:0)

我知道很久以前就问过这个问题了,但是你能告诉我你的m3u8文件吗?HLS会为每个文件使用片段,所以让我们说每个片段都是5s长,当你寻找时会发生什么,该剧将试图坚持其中一个片段的开头,寻求28s将寻求25s或30s。

不过,有一个解决方案,您可以使用以下选项初始化AVURLAsset

let options = [AVURLAssetPreferPreciseDurationAndTimingKey : true] 
let asset = AVURLAsset.init(url: urlStr, options:options)
...
// Init playerItem and a player

但是,加载时间应该更长。