3

因此,我在 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 == 可玩 | 通关OK

播放状态 == 正在播放

在我的第二个 setContentURL 之后:

播放状态 == 停止

负载状态 == 未知

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

谢谢!

4

2 回答 2

9

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

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

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

-[MPMoviePlayerController play]

叫做,

-[MPMoviePlayerController prepareToPlay]

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

So, I just changed my setContentURL call to the following, and everything worked.

self.moviePlayerController.contentURL = fileUrl;
[self.moviePlayerController prepareToPlay];
于 2011-03-22T14:26:28.667 回答
1

contentURL物业的文件说明如下:

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

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

于 2011-03-22T04:17:45.980 回答