我在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.moviePlayerController.contentURL = fileUrl2;
这不起作用,即使fileUrl2 == fileUrl1。
当我更改contentURL时,我得到以下playbackState和loadState:
在第一次setContentURL之后:
loadState == playable | playthroughOK
playbackState ==播放
在我的第二个setContentURL之后:
playbackState ==已停止
loadState == unknown
我当然可以为每部电影创建一个新的MPMoviePlayerController,但我想确保这个问题并不能代表更大的问题。
谢谢!
答案 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
的错误日志。