6

ユーザーがボタンを押したときに MPMoviePlayerController を使用して既存のビューにムービー ビューを追加し、iOS アプリの場所でビデオを再生しようとしています。ビューは正しい位置とすべてにブラック ボックスとして表示されますが、何も起こりません。映画の再生が始まることを期待していますが、何も起こらず、アプリケーションから理由に関するヒントもありません。

これがどこでうまくいかないか誰にもわかりますか?

-(IBAction) playButtonClicked:(id)sender
{
    NSString* path = [[NSBundle mainBundle] pathForResource:@"sample_mpeg4" ofType:@"mp4"];
    NSLog(@"Using videoPath %@", path);
    NSURL* url = [NSURL fileURLWithPath:path];
    MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
    [self.view addSubview:player.view];
    player.view.frame = CGRectMake(10, 10, 300, 220);
   [player play];

}

ムービーは存在し、正しいパスをログに記録しますが、まだムービーが再生されません。

2012-07-06 11:51:13.492 experiments[84702:12203] Using videoPath /Users/marius/Library/Application Support/iPhone Simulator/5.1/Applications/9799C851-8D2B-4CFE-8CFA-A4C4C954787F/experiments.app/sample_mpeg4.mp4

私が読んで理解したことから、これはうまくいくはずです。何を試すべきかについてのヒントや提案はありますか?


ムービーを HTTP サーバー (fg.mp4) に移動し、アクセス ログを追跡しています。再生ボタンをクリックすると、通常の黒いウィンドウが表示されます。サーバー側で、ログに次の 2 つの新しいエントリが見つかりました。

168.122.x.x - - [06/Jul/2012:22:42:33 +0200] "GET /fg.mp4 HTTP/1.1" 304 192 "-" "AppleCoreMedia/1.0.0.9B176 (iPhone Simulator; U; CPU OS 5_1 like Mac OS X; en_us)"
168.122.x.x - - [06/Jul/2012:22:42:33 +0200] "GET /fg.mp4 HTTP/1.1" 206 33304 "-" "AppleCoreMedia/1.0.0.9B176 (iPhone Simulator; U; CPU OS 5_1 like Mac OS X; en_us)"

そのため、電話は映画コンテンツの一部を取得し、必要に応じて残りを取得する準備をしているようです。不足している MPMoviePlayerController の明らかなパラメーターはありますか?


更新: ソリューションと作業コード

この問題は、ARC と、MPMoviePlayerControllerコントローラーを設定するメソッドを呼び出した後に への参照が保持されていないことが原因で発生します。解決策: クラスにクラス変数を追加し、これを使用して、ムービーの有効期間中、コントローラーへの参照を保持します。

クラス宣言の早い段階で(メッセージ/関数定義の外で):

MPMoviePlayerController* mpController;

そして、上記playButtonClickedはこの変数を使用してコントローラーを追跡します。

NSString* path = [[NSBundle mainBundle] pathForResource:@"sample_mpeg4" ofType:@"mp4"];
NSURL* url = [NSURL fileURLWithPath:path];
mpController = [[MPMoviePlayerController alloc] initWithContentURL:url];
mpController.view.frame = CGRectMake(10, 10, 300, 220);
[self.view addSubview:mpController.view];
[mpController play];
4

2 に答える 2

12

MPMoviePlayerController 再生が終了する前にビデオが終了するに対する私の回答と同様に、これはメモリ管理 (インスタンスの有効期間) の問題のようです。ARC でコンパイルしていると仮定すると、変数はメソッドが戻るplayerときに解放されます。playButtonClicked:その時点で、MPMoviePlayerControllerインスタンスはバットとボールを受け取り、家に帰ります。

MPMoviePlayerControllerインスタンスを強力なインスタンス変数またはプロパティに割り当ててみてください。

于 2012-07-07T15:13:14.980 に答える
1

私には明らかに場違いに見えるものは何もありません。問題を絞り込むのに役立つデバッグのヒントを次に示します。

  • http 経由で提供される mp4 ファイルへの URL を使用してみてください。これにより、UI の問題かアセットの問題かがわかります。
  • urlファイルの長さなどのプロパティを調べて、期待したものと正確に一致することを確認してください。
于 2012-07-06T16:23:25.360 に答える