Как справиться, если игрок буферизует и показать уведомление о загрузке в Objective c - PullRequest
0 голосов
/ 15 мая 2019

Итак, у меня проблема с обработкой буферизации AVPlayer и отображением уведомления

Я пытался использовать NSSNortificationCenter с addObserved и добавлением наблюдений вручную (вы можете увидеть это в моем коде), но это не работает. Поэтому все, что мне нужно, это уведомление, появляющееся во время загрузки буфера. Ждем вашей помощи

-(void)initPlayer{

    NSURL *url = [NSURL URLWithString:@"https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8"];
    _asset = [AVAsset assetWithURL:url];
    _player = [[AVPlayer alloc] initWithPlayerItem:[[AVPlayerItem alloc] initWithAsset:_asset]];
    [_player addObserver:self forKeyPath:@"path" options: NSKeyValueObservingOptionNew | NSKeyValueObservingOptionInitial context:nil];
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(makeNortification:) name:AVPlayerItemPlaybackStalledNotification object:_player];
    _layer = [AVPlayerLayer playerLayerWithPlayer:_player];
    [_layer setFrame:(self.view.frame)];
    [self.view.layer addSublayer:_layer];
    [_player play];
    [self setSliderMaxValue];
-(void)makeNortification:(NSNotification *) nortification{
    NSLog(@"waiting..");
}
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
    if (object == _player &&[keyPath isEqualToString:@"status"] ){
        if(_player.status == AVPlayerStatusReadyToPlay){
            NSLog(@"player is ready");
    }
        else if(_player.status == AVPlayerStatusUnknown || _player.status == AVPlayerStatusFailed){
            NSLog(@"waiting.");

        }
        else{

    }
}
...