设置MPMoviePlayerController的ContentURL两次

时间:2011-03-21 21:14:03

标签: cocoa cocoa-touch mpmovieplayercontroller media-player mpmovieplayer

我在loadView方法中创建了一个嵌入式MPMoviePlayerController:

self.moviePlayerController = [[[MPMoviePlayerController alloc] init] autorelease];

// add to view, setup moviePlayerController's view frame, etc

我可以稍后加载用户选择的电影:

NSURL *fileUrl = ...
self.moviePlayerController.contentURL = fileUrl;

一切都很好。

但是,如果我再次设置contentURL:

NSURL * fileUrl2 = ... self.movi​​ePlayerController.contentURL = fileUrl2;

这不起作用,即使fileUrl2 == fileUrl1。

当我更改contentURL时,我得到以下playbackState和loadState:

在第一次setContentURL之后:

  

loadState == playable | playthroughOK

     

playbackState ==播放

在我的第二个setContentURL之后:

  

playbackState ==已停止

     

loadState == unknown

我当然可以为每部电影创建一个新的MPMoviePlayerController,但我想确保这个问题并不能代表更大的问题。

谢谢!

2 个答案:

答案 0 :(得分:9)

在我的初始版本中,我只允许通过嵌入式控件播放电影。如果我在设置contentURL后强制电影立即开始播放,一切正常:

self.moviePlayerController.contentURL = fileUrl;
[self.moviePlayerController play];

但是,这不是我想要的行为。

时我发现了
-[MPMoviePlayerController play]

被称为

-[MPMoviePlayerController prepareToPlay]

自动调用。显然,必须调用prepareToPlay才能显示电影的嵌入控件和初始帧。它似乎是第一次调用setContentURL时自动调用。

所以,我刚刚将setContentURL调用更改为以下内容,一切正常。

self.moviePlayerController.contentURL = fileUrl;
[self.moviePlayerController prepareToPlay];

答案 1 :(得分:1)

contentURL属性的文档说明如下:

  

如果在播放电影时设置此属性,则该影片会暂停并开始加载新影片。新电影开始播放。

所以你遇到的不是预期的行为。您可能希望使用其MPMoviePlayerController属性检索并检查errorLog的错误日志。