首页 文章

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

提问于
浏览
0

我正在尝试使用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

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

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

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

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

相关问题