Objective-C: 動画再生 AVPlayerViewController
概要
いろいろな動画フォーマットがあると思いますが、今回はiPhoneで撮影した動画を標準のライブラリで再生する方法です。
AVPlayerViewController
を使う方法を採り上げます。
なお、動画フォーマットなどと技術的にはさっぱり役に立たない用語で誤魔化しましたが、対象とする動画の仕様はAVPlayerViewControllerの仕様から逆引きして下さいませ。
キーワード: ファイルフォーマット、コーデック
詳細
再生するファイルが何処にあるか?というか話は今回の本題ではないので、今回はたまたま動画がアプリ内にあったとします。(たまたまですよ、たまたま)
コードはこんな感じ。
@import AVKit; @import AVFoundation; @interface AVPlayerViewController1 : AVPlayerViewController @end @implementation AVPlayerViewController1 - (void)viewDidLoad { [super viewDidLoad]; // パス(Documents/movie00.m4v)の文字列を生成、URL化 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"movie00.m4v"]; NSURL *url = [NSURL fileURLWithPath:path]; self.player = [AVPlayer playerWithURL:url]; [self.player play]; //再生が最後に到達したら通知を発生させ、通知を受け取ったらもう一度再生されるようにする [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:[self.player currentItem]]; } - (void)playerItemDidReachEnd:(NSNotification *)notification { [self.player seekToTime:kCMTimeZero]; [self.player play]; } @end
今回は動画が繰り返し再生されるように、ローカル通知を使って「巻き戻し&再生」作業を行っています。
このコードを利用するには、以下のような流れになります。
Objective-Cファイルを1つ新規追加して、上記コードをコピペする。
StoryBoard上で、AVPlayerViewControllerを追加してSegueでViewの呼出設定をして、クラスファイルにAVPlayerViewController1を指定する。
- どうにかしてDocumentsフォルダ内に動画をおいて、実行。
さいごに
その他にも様々なライブラリが世に出ていると思います。そのあたりは、また出会ったときに扱いたいと思います。
それから、再生する動画ファイルの場所は、そのアプリで撮影した場合、アプリ内でダウンロードした場合、そういったケースでは今回のコードのようにそのアプリ内にあるかと思います。これらは何れにしても、今回掲載のケースのバリエーションの一つだと思います。
そしてその他の場所としては、
- カメラロール
- iCloud
といったケースが考えられます。それらについては、全く別のコンテキストでの利用が想定されますので、今回とは別の投稿で取り扱いたいと思います。