Ответ 1
Да Мы можем показать данные потока с помощью MPMoviePlayerController по playableDuration. Я объясняю, что все эти шаги помогли мне сделать этот custom_slider для моего персонализированного проигрывателя...
(Вы можете читать шаг 4, если вы только заинтересованы в программировании) Это следующие шаги:
Шаг 1: (первая часть дизайна). Я сделал это с помощью стандартных элементов управления...
В интерфейсе Builder поместите ваш 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} для стандартного слайдера и просмотра прогресса.
Ссылка, принятая с таким ответом fooobar.com/questions/145963/...
Шаг 2:
Теперь я попытался установить дорожку и выполнить изображение UIProgressView. Но он не показывал дорожку и изображение прогресса. то я нашел это решение... использовать эту библиотеку, доступную в github. https://gist.github.com/JohnEstropia/9482567
Теперь я изменил вхождения UIProgressView в JEProgressView, в том числе в NIB и раскадровки.
В принципе, вам нужно принудительно назначать изображения непосредственно в UIImageViews UIProgressView.
Подкласс необходим для переопределения layoutSubviews, где вы настраиваете высоты изображений в соответствии с размерами изображений.
Ссылка, взятая из этого ответа fooobar.com/questions/108763/...
Шаг 3:
Но теперь возникает вопрос, из которого вы сделаете изображение для слайдера и progressView. Это объясняется в этом уроке, и вы также можете скачать psd.
http://www.raywenderlich.com/32167/photoshop-tutorial-for-developers-creating-a-custom-uislider
Шаг 4:
Теперь приступим к программированию. используя длительность воспроизведения, можно показать данные потока.. (что было моей самой большой проблемой)
Используя MPMovieLoadStatePlayable, мы можем получить, когда в буфере есть достаточно данных, которые могут начаться, но может закончиться до того, как воспроизведение закончится.
Теперь в вашем методе PlayAudio... поместите этот код..
-(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 ;
}
Я надеюсь, что этот полностью настраиваемый слайдер поможет вам в создании пользовательского плеера... Я объяснил всю свою работу в шагах..... Спасибо....