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==再生可能| playthroughOK

playingState==再生中

2番目のsetContentURLの後:

playingState==停止

loadState==不明

もちろん、すべての映画に対して新しいMPMoviePlayerControllerを作成することはできますが、この問題がより大きな問題を示していないことを確認したいと思います。

ありがとう!

4

2 に答える 2

9

私の最初のバージョンでは、埋め込まれたコントロールを介してのみムービーを再生できるようにしていました。contentURL を設定した直後にムービーの再生を強制的に開始すると、すべて正常に機能しました。

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

ただし、これは私が望んでいた動作ではありません。私はそれを発見したとき

-[MPMoviePlayerController play]

と呼ばれ、

-[MPMoviePlayerController prepareToPlay]

自動的に呼び出されます。どうやら、埋め込みコントロールとムービーの最初のフレームを表示するには、prepareToPlay を呼び出す必要があります。setContentURL が最初に呼び出されたときに自動的に呼び出されるようです。

そのため、 setContentURL 呼び出しを次のように変更しただけで、すべてが機能しました。

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

プロパティのドキュメントにはcontentURL、次のように記載されています。

ムービーの再生中にこのプロパティを設定すると、そのムービーが一時停止し、新しいムービーのロードが開始されます。新しいムービーが最初から再生されます。

したがって、あなたが経験しているのは、期待される動作ではありません。MPMoviePlayerControllerそのerrorLogプロパティを使用して、エラー ログを取得して確認することができます。

于 2011-03-22T04:17:45.980 に答える