1

有没有其他人注意到 MPMoviePlayerController 类的 playableDuration 属性在 iOS 5 中总是返回 0。这在以前的 iOS 版本中可以正常工作。我用它来设置进度条的值。

这是一段在 4.x SDK 下正常工作的代码(即 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];

 }
4

1 回答 1

0

使用您的确切代码,但将 url 替换为: http: //devimages.apple.com/iphone/samples/bibpop/gear1/prog_index.m3u8

对我来说,除非我将播放器指向分段的 .m3u8 文件,否则您的代码会失败。

我在我的计算机上本地对 .mp4 电影和 .mp3 音频文件进行了一些测试,并且都运行良好。

我在这里推测,但我相信在流媒体时,MPMoviePlayerController 可能正在使用 .m3u8 文件动态推断播放器项目数据?无论如何,这是我的猜测。奇怪的是,如果是这种情况,为什么它对您的 url 有效?这导致我的下一个评论......

使用 AVFoundation 而不是 MediaPlayer 框架,您可能会获得更好的结果。我也在自己的工作中切换到它。它不那么“预先打包”,但只是提供了更多的控制。

于 2012-05-05T19:24:01.017 回答