【发布时间】:2019-07-08 15:36:06
【问题描述】:
我正在使用 AVPlayer 播放 HLS 直播流,我试图通过模拟暂停将播放器速率设置为 0.05 来强制延迟,当延迟达到所需的延迟时,我将速率设置为 1,有时播放器重置流。这可以在模拟器上更频繁地观察到。有谁知道为什么会这样?
【问题讨论】:
我正在使用 AVPlayer 播放 HLS 直播流,我试图通过模拟暂停将播放器速率设置为 0.05 来强制延迟,当延迟达到所需的延迟时,我将速率设置为 1,有时播放器重置流。这可以在模拟器上更频繁地观察到。有谁知道为什么会这样?
【问题讨论】:
要解决问题标题/标题中提出的问题:
我使用 player.pause() 和 player.play() 来暂停和恢复 HLS 提要,并且效果很好。如果您以编程方式确定延迟时间,可以尝试使用 pause() 和 play() 方法进行计时。
现在,解决正文中的问题:
我在尝试手动同步两台设备(暂停/播放/暂停/播放)时偶尔会观察到这种“重置”行为。
我的猜测是播放器会尽力同步到关键帧,具体取决于它缓冲的内容。网络连接的抖动或流的比特率、关键帧速率和帧速率等因素都会影响播放器从状态变化中恢复的能力,以及它在流中的位置。
当您使用模拟器时,您并没有从实际硬件的性能提升中受益(因为一切都是模拟的),因此它对 CPU 的负担更大,并且更容易出现问题。
【讨论】: