我使用MPMoviePlayerController播放音频,我想在滑块上显示这样的缓冲数据.

我想在滑块中显示缓冲区数据,比如红色部分。我试过用谷歌搜索它。但我没有找到任何解决办法。以及如何使滑块定制?提前谢谢..。
发布于 2015-01-01 07:15:48
是的,我们可以使用MPMoviePlayerController通过它的playableDuration.显示流数据我正在解释所有这些步骤涉及到我的custom_slider为我的定制播放器.
(如果您只对编程部分感兴趣,可以直接阅读步骤4 )以下是步骤:
步骤1:(First )I使用标准控件.
在Interface中,将您的UISlider立即放在您的UIProgressView之上,并使其大小相同。
在UISlider上,背景水平线被称为轨道,诀窍是让它看不见。我们使用透明的PNG和UISlider方法setMinimumTrackImage:forState和setMaximumTrackImage:forState:。
在视图控制器的viewDidLoad方法中添加:
[ProgressSlider setMinimumTrackImage:minImage forState:UIControlStateNormal];
[ProgressSlider setMaximumTrackImage:transparentImage forState:UIControlStateNormal];
[progressBar setTrackImage:maxImage];
[progressBar setProgressImage:streamImage];其中ProgressSlider指的是UISlider,progressBar指的是UIProgressView。
你可以像这样以编程的方式制作透明的图像。
 UIGraphicsBeginImageContextWithOptions((CGSize){512,5}, NO, 0.0f);
    UIImage *transparentImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();您可以根据进度视图、跟踪图像高度、宽度.更改其大小。我使用{512,5},您可以对默认滑块和进度视图使用{1,1}。
参考摘自本答案https://stackoverflow.com/a/4570100/3933302
步骤2:
现在,我尝试设置UIProgressView的跟踪和进度图像。但它并没有显示轨迹和进度图像。然后我发现这个solution...to使用github中的这个库。https://gist.github.com/JohnEstropia/9482567
现在,我将UIProgressView的出现改为了JEProgressView,包括在NIB和故事板中出现的事件。
基本上,您需要强制将图像直接分配给UIProgressView的子UIImageViews。
重写layoutSubviews需要子类,您可以根据图像大小调整imageViews的高度。
参考摘自这个答案https://stackoverflow.com/a/22322367/3933302
步骤3:
但现在的问题是,您将从谁为滑块和progressView的图像。这将在本教程中解释,您也可以下载psd。
http://www.raywenderlich.com/32167/photoshop-tutorial-for-developers-creating-a-custom-uislider
步骤4:
现在开始编写..。通过使用可播放的持续时间,可以显示流数据.(这是我最大的问题)
使用MPMovieLoadStatePlayable,我们可以得到缓冲区有足够的数据可以开始回放,但它可能会在播放结束之前耗尽数据。
在您的PlayAudio method...place中,这段代码..。
-(void) playAudio:(NSURL *) url {
.............
streamTimer= [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(loadStateChange) userInfo:nil repeats:YES];
..........
}以下是loadStateChange的定义
-(void)loadStateChange
{
if(self.moviePlayer.loadState == MPMovieLoadStatePlayable){
    [self.moviePlayer play];
    slideTimer = [NSTimer scheduledTimerWithTimeInterval:0.5
                                                  target:self
                                                selector:@selector(updateProgressUI)
                                                userInfo:nil
                                                 repeats:YES];
    [streamTimer invalidate];
}
else if(self.downloadList)
//if you are playing local file then it will show track with full red color
    progressBar.progress= appDel.moviePlayerController.moviePlayer.duration;
}以下是updateProgressUI的定义
- (void)updateProgressUI{
    if(self.moviePlayer.duration == self.moviePlayer.playableDuration){
        // all done
        [slideTimer invalidate];
    }
    progressBar.progress = self.moviePlayer.playableDuration/self.moviePlayer.duration ;
}我希望这个完全定制的滑块能帮助你制作定制播放器.我在steps.....Thanks中解释了我所有的工作.
发布于 2014-12-17 12:18:59
你不能用MPMoviePlayerController来做这件事。
但是,如果切换到AVPlayer,则可以使用AVPlayerItem.loadedTimeRanges。它包含自定义控件中可视化所需的所有信息。
就这一问题提出了若干问题,例如:
发布于 2014-12-19 16:28:59
https://stackoverflow.com/questions/27522740
复制相似问题