空のプロジェクト(iOS)を作成し、これをviewDidLoadに追加しました。
NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"m4v"];
MPMoviePlayerViewController *playerController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:moviePath]];
[self presentMoviePlayerViewControllerAnimated:playerController];
[playerController.moviePlayer play];
アプリを起動すると、ログにエラーメッセージが表示される白い画面:
<Error>: CGContextSaveGState: invalid context 0x0
<Error>: CGContextClipToRect: invalid context 0x0
<Error>: CGContextTranslateCTM: invalid context 0x0
<Error>: CGContextDrawShading: invalid context 0x0
<Error>: CGContextRestoreGState: invalid context 0x0
Warning: Attempt to present <MPMoviePlayerViewController: 0x821e3b0> on <ViewController: 0x863aa40> whose view is not in the window hierarchy!
...および自動再生の無効化に関する一連の行。ビューが階層の一部ではないことについての行が空の「シングルビューアプリケーション」iOSプロジェクトであり、コードがViewController.mにあるため、特にわかりません。ビュー階層では、IS。
MPMoviePlayerのAppleのサンプルコードから取得したため、ムービーファイル自体は問題ではないという事実を知っています。そして、サンプルで書かれたすべてのことを(一見)試しましたが、プレーヤーを動作させることができませんでした。
MPMoviePlayerController(MPMoviePlayerViewControllerではない)を使用した別の試みを次に示します。
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
[player setContentURL:url];
[player setMovieSourceType:MPMovieSourceTypeFile];
[[player view] setFrame:self.view.bounds];
[player view].backgroundColor = [UIColor greenColor];
player.scalingMode = MPMovieScalingModeNone;
player.controlStyle = MPMovieControlModeDefault;
player.backgroundView.backgroundColor = [UIColor whiteColor];
player.repeatMode = MPMovieRepeatModeNone;
[self.view addSubview: [player view]];
[player play];
白い画面とエラーのある同様の結果。助けてください....
私たちがしなければならないのはこれだけです:
_NSURL *movieURL = [NSURL URLWithString:@"http://example.com/somefile.mp4"];
movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:movieURL];
[self presentMoviePlayerViewControllerAnimated:movieController];
[movieController.moviePlayer play];
_
movieController
は、.hファイルで宣言されたMPMoviePlayerViewController
のインスタンスです。
重要:URLを定義するときに、ネットワーク経由でファイルにアクセスする場合はNSURLのURLWithString
メソッドを使用し、ローカルにファイルがある場合はNSURLのfileUrlWithPath
を使用します。
_[movieController.moviePlayer play]
_ 必須ではありません自動再生をNOに設定していなくてもプレイヤーは起動しますが、play
を入れると少し早く起動することがわかりました。これは偶然かもしれません。
ユーザーが完了ボタンをタップしたとき(プレーヤーは自動的に閉じられます)を知りたい場合は、プレーヤーが閉じられたときに表示されるView Controllerで_-viewDidAppear
_が呼び出されることを知っておく必要があります。プレーヤーの起動時にBOOL
変数を設定し、_-viewDidAppear
_のBOOL
をチェックして、プレーヤーが解雇されたために_-viewDidAppear
_が呼び出されたことを確認できます。または、MPMoviePlayerDidExitFullScreen
通知に登録することもできますが、それではうまくいきませんでした。
または、これが機能しない場合は、次のことを行うことができます
_self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"something" ofType:@"mp4"]]];
[self.moviePlayer.view setFrame:CGRectMake(0, 0, 320, 320)];
[self.moviePlayer play];
[self.view addSubview:self.moviePlayer.view];
_
self.movieplayerはMPMoviePlayerControllerのインスタンスです(MPMoviePlayerViewControllerではありません)。私の経験では、単純なivarではなく、プロパティとして宣言することが重要です(例:@property (strong, nonatomic) MPMoviePlayerController *moviePlayer;
)。これは、ivarの場合は機能しない場合があるためです。
フレームを設定することも重要です。設定しないと、ビデオがまったく表示されないためです。定義するものがビューの範囲内にある限り、フレームは何でもかまいません
重要:上記のように、URLを定義するときに、ファイルにアクセスする場合はNSURLのURLWithString
メソッドを使用しますネットワーク経由を使用し、NSURLのfileUrlWithPath
を使用する場合ファイルがあるlocally!
これを試してみてください......
NSString *path = [[NSBundle mainBundle]pathForResource:@"test" ofType:@"mp4"];
player = [[MPMoviePlayerViewController alloc]initWithContentURL:[NSURL fileURLWithPath:path]];
[player.view setFrame:CGRectMake(0, 0, 320, 320)];
[self presentMoviePlayerViewControllerAnimated:player];
[player.moviePlayer play];
[self.view addSubview:player.view];
これを試して:
//Hello guise :- complete process here.
//1. add framework in .h
MediaPlayer/MediaPlayer.h
//2.add delegate in @interface, MPMediaPickerControllerDelegate
//3.@property (retain, nonatomic) MPMoviePlayerViewController *moviePlayerController;
//4.and synthesize in .m - @synthesize moviePlayerController;
//5.IN - tableViewdelegateMethod
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath{
//given path for song
NSArray *paths1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory1 = [paths1 objectAtIndex:0];
NSString *strPath = [NSString stringWithFormat:@"%@/%@",documentsDirectory1,[movieArray objectAtIndex:indexPath.row]];
NSLog(@"strPath %@",strPath);
//path for song.
//convert path in NSURL.
NSURL *videosURL = [NSURL fileURLWithPath:strPath];
moviePlayerController = [[MPMoviePlayerViewController alloc]initWithContentURL:videosURL];
[self presentMoviePlayerViewControllerAnimated:moviePlayerController];
[moviePlayerController.moviePlayer play];
}
//play song on UITableViewCell click.
追加してみてください
[player prepareToPlay];
後
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
MPMoviePlayerControllerの詳細については、Apple documentation: http://developer.Apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference。 html#// Apple_ref/doc/c_ref/MPMoviePlayerController