41
43

More than 5 years have passed since last update.

[Objective-C] MPMoviePlayerControllerで動画を再生する

Posted at

最低限のコードで動くサンプルを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を渡して生成し、さらにmovieSourceTypeMPMovieSourceTypeStreamingを指定するとクラッシュする、という問題。

初期化時ではなく、movieSourceTypeプロパティを設定したあとに改めてcontentURLを設定すると問題なく動いた。

※ちなみにMPMovieSourceTypeFileを指定する場合はinitWithContentURL:を使っても問題ありませんでした。

41
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
43