ios avplayer 触发器流超出缓冲区 [英] ios avplayer trigger streaming is out of buffer

查看:33
本文介绍了ios avplayer 触发器流超出缓冲区的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to reconnect to the server when the streaming buffer is empty.

如何在 AVPlayerAVPlayerItem 缓冲区为空时触发方法?

How can I trigger a method when the AVPlayer or AVPlayerItem buffer is empty?

我知道有 playbackLikelyToKeepUpplaybackBufferEmptyplaybackBufferFull 方法来检查缓冲区状态,但这些不是回调.

I know there are playbackLikelyToKeepUp, playbackBufferEmpty and playbackBufferFull methods to check the buffer status, but those are not callbacks.

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

Are there any callback functions, or any observers I should add?

推荐答案

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

you can add observer for those keys:

[playerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil];
[playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil];

第一个会在您的缓冲区为空时警告您,第二个会在您的缓冲区可以再次使用时发出警告.

The first one will warn you when your buffer is empty and the second when your buffer is good to go again.

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

Then to handle the key change you can use this code:

- (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
        }
    }
}

这篇关于ios avplayer 触发器流超出缓冲区的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆