UISlider 的 Avplayer 问题
Posted
技术标签:
【中文标题】UISlider 的 Avplayer 问题【英文标题】:Avplayer issues with UISlider 【发布时间】:2015-11-02 10:54:55 【问题描述】:您好,我刚刚创建了 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 方法? (似乎不在此代码中)。应该从 NSTimer 调用吗? Seektime 是我的 UISlider 方法名称。请检查一下 我已经编辑了,请查看@TiagoLira 【参考方案1】:seekTime
仅在用户移动滑块时调用。所以这不是更新它的好地方。
您应该有一个从 NSTimer 调用的 updateProgress
方法,这是您需要更新滑块位置的地方:
- (void)updateProgress
[seekbar setValue:CMTimeGetSeconds(audioPlayer.currentTime)];
所以每次 NSTimer 触发时,它都应该更新滑块的位置。
在seekTime
方法中,您应该做相反的事情:将音频播放设置为用户选择的点。像这样的:
[audioPlayer setCurrentTime:seekbar.value];
【讨论】:
它的工作非常酷,但它不与 Audioplayer 同步。我在 UISlider 方法中做了什么? 在 seekTime 部分,您应该将播放设置为 UISlider 上的值。我已经编辑了答案以表明这一点。 [audioPlayer setCurrentTime:seekbar.value]; 此代码在 UISlider 操作中不起作用@Tiago Lira以上是关于UISlider 的 Avplayer 问题的主要内容,如果未能解决你的问题,请参考以下文章
AVPlayer seekToTime 不正确使用 UISlider