UISlider 的 Avplayer 问题

Avplayer issues with UISlider

您好,我刚刚创建了 AVplayer 用于从服务器播放音频。我的问题是我的 UISlider 没有根据 Audioplayer 移动。请帮助我解决这个问题。

    seekbar =[[UISlider alloc]init];
    seekbar.frame=CGRectMake(10,CGRectGetMinY(PlayAudio.frame)-50, CGRectGetWidth(self.view.frame)-20, 20);
    [seekbar addTarget:self action:@selector(seekTime:) forControlEvents:UIControlEventValueChanged];
    seekbar.continuous=YES;
    seekbar.minimumValue=0;
    seekbar.maximumValue=20;
    [self.view addSubview:seekbar];

    -(void)Audio{
        NSString *urlString= @"https.wav";

        audioPlayer = [[AVPlayer alloc]initWithURL:[NSURL URLWithString:urlString]];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(playerItemDidReachEnd:)
                                                     name:AVPlayerItemDidPlayToEndTimeNotification
                                                   object:[audioPlayer currentItem]];
        [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateProgress) userInfo:nil repeats:YES];
        [audioPlayer play];


    }

    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {

        if (object == audioPlayer && [keyPath isEqualToString:@"status"]) {
            if (audioPlayer.status == AVPlayerStatusFailed) {
                NSLog(@"AVPlayer Failed");

            } else if (audioPlayer.status == AVPlayerStatusReadyToPlay) {
                NSLog(@"AVPlayerStatusReadyToPlay");
                [audioPlayer play];


            } else if (audioPlayer.status == AVPlayerItemStatusUnknown) {
                NSLog(@"AVPlayer Unknown");

            }
        }
    }

    - (void)seekTime:(id)sender {

        [seekbar setValue:CMTimeGetSeconds(audioPlayer.currentTime)];
    }

seekTime 仅在用户移动滑块时调用。所以这不是更新它的好地方。

你应该有一个 updateProgress 方法,它从 NSTimer 调用,这是你需要更新滑块位置的地方:

- (void)updateProgress {
        [seekbar setValue:CMTimeGetSeconds(audioPlayer.currentTime)];
}

所以每次 NSTimer 触发时,它应该更新滑块的位置。

seekTime 方法中,您应该执行相反的操作:将音频播放设置为用户选择的点。像这样:

[audioPlayer setCurrentTime:seekbar.value];