playableDuration возвращает 0 в iOS5 - PullRequest
1 голос
/ 14 октября 2011

Кто-нибудь еще заметил, что свойство playableDuration класса MPMoviePlayerController всегда возвращает 0 в iOS 5. Это нормально работало в предыдущих версиях iOS. Я использую его для установки значения индикатора выполнения.

Вот фрагмент кода, который отлично работал в SDK 4.x (т. Е. Атрибут playableDuration возвращал правильное ненулевое значение при буферизации потока), но в SDK 5.x он всегда возвращает ноль.

- (void) updateMeter {
NSLog(@"playableDuration = %f", streamPlayer.playableDuration);
}

- (void)viewDidLoad
{

[super viewDidLoad];
streamPlayer = [[MPMoviePlayerController alloc] 
initWithContentURL:[NSURL    URLWithString:@"http://99.198.118.250:8158/"]];    

NSTimer *updateBarTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 
                          target:self selector:@selector(updateMeter)    
                          userInfo:nil repeats:YES];

streamPlayer.controlStyle = MPMovieControlStyleEmbedded;
[streamPlayer play];

 }

1 Ответ

0 голосов
/ 05 мая 2012

Используйте свой точный код, но замените URL на: http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8

Для меня ваш код не удался, если я не указал проигрывателю на сегментированный файл .m3u8.

Я провел несколько тестов с фильмом .mp4 и аудиофайлом .mp3 локально на моем компьютере, и оба работали хорошо.

Я размышляю здесь, но я полагаю, что при потоковой передаче мультимедиа MPMoviePlayerController использует файл .m3u8 для вывода данных об элементе проигрывателя на лету? В любом случае, это мое предположение. Что любопытно, что если это так, то почему это вообще работает для вашего URL? Что приводит меня к моему следующему комментарию ...

Возможно, вы получите лучшие результаты, используя AVFoundation, а не среду MediaPlayer. Я переключился на это в моей собственной работе также. Он менее «расфасован», но просто обеспечивает гораздо больший контроль.

...