Hea*_*ers 3 cocoa cocoa-touch mpmovieplayercontroller media-player mpmovieplayer
我在loadView方法中创建了一个嵌入式MPMoviePlayerController:
self.moviePlayerController = [[[MPMoviePlayerController alloc] init] autorelease];
// add to view, setup moviePlayerController's view frame, etc
Run Code Online (Sandbox Code Playgroud)
我可以稍后加载用户选择的电影:
NSURL *fileUrl = ...
self.moviePlayerController.contentURL = fileUrl;
Run Code Online (Sandbox Code Playgroud)
一切都很好.
但是,如果我再次设置contentURL:
NSURL*fileUrl2 = ... self.moviePlayerController.contentURL = fileUrl2;
即使fileUrl2 == fileUrl1,这也不起作用.
当我更改contentURL时,我得到以下playbackState和loadState:
在第一个setContentURL之后:
loadState == playable | playthroughOK
playbackState ==播放
在我的第二个setContentURL之后:
playbackState ==已停止
loadState == unknown
我当然可以为每部电影创建一个新的MPMoviePlayerController,但我想确保这个问题不是一个更大的问题.
谢谢!
在我的初始版本中,我只允许通过嵌入式控件播放电影.如果我在设置contentURL后强制电影立即开始播放,一切正常:
self.moviePlayerController.contentURL = fileUrl;
[self.moviePlayerController play];
Run Code Online (Sandbox Code Playgroud)
但是,这不是我想要的行为.我发现的时候
-[MPMoviePlayerController play]
Run Code Online (Sandbox Code Playgroud)
叫做,
-[MPMoviePlayerController prepareToPlay]
Run Code Online (Sandbox Code Playgroud)
被自动调用.显然,必须调用prepareToPlay才能显示电影的嵌入控件和初始帧.它似乎是第一次调用setContentURL时自动调用.
所以,我刚刚将setContentURL调用更改为以下内容,一切正常.
self.moviePlayerController.contentURL = fileUrl;
[self.moviePlayerController prepareToPlay];
Run Code Online (Sandbox Code Playgroud)