ios avplayer触发器流不受缓冲区限制

Ada*_*ang 16 audio-streaming ios avplayer

我想在流缓冲区为空时重新连接到服务器.

我怎样才能触发的方法时,AVPlayerAVPlayerItem缓冲区是空的?

我知道有playbackLikelyToKeepUp,playbackBufferEmpty以及playbackBufferFull检查缓冲区状态的方法,但那些不是回调.

是否有任何回调函数,或者我应该添加的任何观察者?

sci*_*sxp 55

您可以为这些键添加观察者:

[playerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil];
[playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil];
Run Code Online (Sandbox Code Playgroud)

第一个将在缓冲区为空时发出警告,第二个在缓冲区再次运行时发出警告.

然后,要处理密钥更改,您可以使用此代码:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                        change:(NSDictionary *)change context:(void *)context {
    if (!player)
    {
        return;
    }

    else if (object == playerItem && [keyPath isEqualToString:@"playbackBufferEmpty"])
    {
        if (playerItem.playbackBufferEmpty) {
            //Your code here
        }
    }

    else if (object == playerItem && [keyPath isEqualToString:@"playbackLikelyToKeepUp"])
    {
        if (playerItem.playbackLikelyToKeepUp)
        {
            //Your code here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)