最低限のコードで動くサンプルをGithubに上げてあります。
MediaPlayer.frameworkを使う
MPMoviePlayerControllerは、MediaPlayer.frameworkを使います。
冒頭でこれをimportします。
#import <MediaPlayer/MediaPlayer.h>
また、生成したMPMoviePlayerControllerを保持するためにプロパティを宣言します。
@property (strong, nonatomic) MPMoviePlayerController *player;
そして、動画のURLでMPMoviePlayerControllerを初期化し、再生します。
NSURL *url = [NSURL URLWithString:@"http://hoge.com/sample.mp4"];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
// MoviePlayerを保持
self.player = player;
// 動画読み込み後に呼ばれるNotification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePreloadDidFinish:)
name:MPMediaPlaybackIsPreparedToPlayDidChangeNotification
object:player];
// 動作の再生終了時に呼ばれるNotification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayerPlaybackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:player];
player.view.frame = CGRectMake(0, 0, 320, 200);
[self.view addSubview:player.view];
// 再生開始
[player prepareToPlay];
ハマったメモ
なんでかハマったのでメモ。
最初、適当に調べてきたコードをそのまま使って実行してみるも動画再生できず。
動画自体に問題なのか、まったく原因特定できず。
単なるシミュレータの問題でした
色々調べていたら、最初ダメだったけど時間たったらなぜか動いた的な記事を見つけて、もしかしてシミュレータの問題か? と思い実機で実行すると・・普通に動いたorz
原因は不明だけど、コード自体にはまったく問題なかった模様。
誰かの役に立てばと思い、とりあえずメモしておきます。
initWithContentURL:
するとクラッシュする
MPMoviePlayerController
を初期化する際、initWithContentURL:
にURLを渡して生成し、さらにmovieSourceType
をMPMovieSourceTypeStreaming
を指定するとクラッシュする、という問題。
初期化時ではなく、movieSourceType
プロパティを設定したあとに改めてcontentURL
を設定すると問題なく動いた。
※ちなみにMPMovieSourceTypeFile
を指定する場合はinitWithContentURL:
を使っても問題ありませんでした。