控制AVPlayer上的缓冲区

时间:2019-11-21 08:51:41

标签: objective-c video-streaming avplayer http-live-streaming

在使用AVPlayer创建显示 HLS实时流的应用程序时,我遇到了无法控制播放器需要缓冲多少数据的问题。我想向用户介绍暂停直播的可能性,可以说最多3分钟,然后自动恢复播放。但是似乎无法将AVplayer / AVplayerItem配置为至少缓冲3分钟的视频数据

我尝试了

的组合
playerItem.canUseNetworkResourcesForLiveStreamingWhilePaused = true;
playerItem.preferredForwardBufferDuration = 180;

但是,在暂停流时,大多数流会缓冲多达一分钟的数据,允许在暂停后继续播放视频,但是当暂停时间较长时,缓冲会被清除并且实时播放会恢复。

目前还不清楚如何从playerItem解释loadingTimeRanges :(在t = 35处按下暂停)

16:53:06.30 :  BUFFER = [ 32  <  _35_  <  60 ] => 25 seconds available | buffer = 28
16:53:07.30 :  BUFFER = [ 32  <  _35_  <  62 ] => 27 seconds available | buffer = 30
16:53:08.30 :  BUFFER = [ 34  <  _35_  <  62 ] => 27 seconds available | buffer = 28
16:53:09.30 :  BUFFER = [ 34  <  _35_  <  64 ] => 29 seconds available | buffer = 30
16:53:10.30 :  BUFFER = [ 34  <  _35_  <  64 ] => 29 seconds available | buffer = 30
16:53:11.30 :  BUFFER = _35_  <  [ 36  <  66 ] => 31 seconds available | buffer = 30
16:53:12.30 :  BUFFER = _35_  <  [ 38  <  66 ] => 31 seconds available | buffer = 28
16:53:13.30 :  BUFFER = _35_  <  [ 38  <  68 ] => 33 seconds available | buffer = 30

在此示例中,我仅收到1个范围,即从38秒到68秒,这给了我实时时刻前30秒的缓冲,该缓冲随着时间的流逝而更新。视频在t = 35(此范围之外)处暂停。恢复播放可以正确输出视频,而当前时间仍保持在给定范围之外...因此,某种程度上,缓冲的数据要大于loadTimeRanges中提供的信息(同样适用于seekableTimeRanges)。

暂停时间超过100秒(在t = 267时)后,缓冲区将被清除:

16:58:51.47 : BUFFER = _267_ < [ 370  <  375 ] => 99 seconds available | buffer = 5
16:58:51.72 : BUFFER = _267_ < [ 370  <  375 ] => 99 seconds available | buffer = 5
16:58:51.97 : BUFFER playbackBuffer EMPTY
16:58:51.97 : BUFFER playbackBuffer LIKELY TO KEEP UP
16:58:52.19 : BUFFER playbackBuffer FULL
16:58:52.19 : BUFFER playbackBuffer EMPTY
16:58:53.18 : BUFFER playbackBuffer LIKELY TO KEEP UP
16:58:53.21 : BUFFER = [ 400  <  _400_  <  402 ] => 2 seconds available | buffer = 2

0 个答案:

没有答案
相关问题