iOS 4.3 で使えるようになったthird-party appからのAirPlay呼び出しを試してみる

iOS 4.3の目玉機能の一つ、third party appからのAirPlay利用について、コードを書いてテストしてみました。

といっても、難しいプログラミングが必要な訳ではなく、今まで動画を再生するのに使っていた MPMoviePlayerConntroller に追加された allowsAirPlay というプロパティをYESに設定するだけ。
これで、動画再生のコントローラの並びにあのAirPlayボタンが追加され、それをクリックすると出力先のリストが表示されるようになります。

今回はとりあえず試してみようということで、以下のようなコードを、ViewControllerのloadViewのところに直接書いてみます。

- (void)loadView {
CGRect bounds = [[UIScreen mainScreen] applicationFrame];

NSURL* url=[NSURL URLWithString:@"http://dev.uniba.jp/~jun/apt/test.m4v"];

MPMoviePlayerController *movie=[[MPMoviePlayerController alloc] initWithContentURL:url];

movie.scalingMode=MPMovieScalingModeAspectFit;
movie.allowsAirPlay = YES;

[movie.view setFrame:bounds];
self.view = movie.view;

[movie play];
}

これでビルドしてSimulatorで実行してみましたが、AirPlayボタンが出てきません。どうやら、SimulartorはAirPlayに対応していないようです。(リファレンスにも対応したDeviceで、と書かれています)

気を取り直して、実機をUSBでつないで今度はターゲットをDeviceにしてビルド。しばらく待った後に、実機でアプリが起動し、プレイヤーが起動、AirPlayボタンが表示されました。

AirPlayボタンをクリックして、AppleTVを選択してみましたが今度は「Cannot play video on “Apple TV”」というアラートが表示されます。もしやと思って確認してみると、Apple TV側でソフトウェアアップデートのガイダンスが表示されています。Apple TV側のソフトウェアバージョンが4.1系だったのですが、こちらも最新のバージョンにアップデートする必要がありました。

Apple TV側のソフトウェアをアップデートすると、ちゃんと先ほどのコードで、映像を飛ばすことができました。

アプリからのAirPlayの呼び出しは、MPMoviePlayerController のプロパティということで、今のところAirPlay経由で飛ばせるのは、MPMoviePlayerControllerがサポートしている動画ファイルということになるようです。AirPlayのプロトコルは、静止画もサポートしているようですが、こちらはAPIとして利用できる状態にないようです。

preload preload preload