iPhoneでMediaPlayer.frameworkを使って動画を再生する方法

アプリ開発でつまずいたところを書いていきたいと思います。

再生できるビデオフォーマット

  • H.264 Baseline Profile
    • 最大 640x480 最大30fps (Bフレームはサポートされない)
    • 最大 1.5MBps
    • 音声 最大160kbps AAC-LC 48Khz
  • MPEG4 Part2 Simple Profile
    • 最大 640x480 最大30fps
    • 最大2.5Mbps
    • 音声は最大160kbpsのAAC-LC 48kHz
  • 対応拡張子
    • mp4/m4v/mov/.3gp

簡単に動画をつくりたい場合は
iMovieを利用すると簡単にできます。
写真だけでスライドショー動画がつくれるので
サンプルアプリをつくるのに有効ですね。

MediaPlayer.frameworkとりこみ

iPhoneiTunesのビデオを再生するようなUIで
動画を再生したい場合はMediaPlayer.frameworkを使えば可能ということが判明。

じゃあさっそく既存のフレームワークから追加しようと試みたところ
MediaPlayer.frameworkがframeworkのリストにない、、、

いったいどこにあるんだろうと思って
とりあえずSampleのMoviePlayerの中の
MediaPlayer.frameworkをコピって
ビルドしてみたところ以下のようなエラーが

"_MPMoviePlayerContentPreloadDidFinishNotification", referenced from:
".objc_class_name_MPMoviePlayerController", referenced from:
"_MPMoviePlayerPlaybackDidFinishNotification", referenced from:
"_MPMoviePlayerScalingModeDidChangeNotification", referenced from:

おっとー、なんかあやしげなエラーだ。
いろいろ調べてみるとどうやら
フレームワークを正しくリンクできていない模様

参考:)
http://discussions.apple.com/thread.jspa?threadID=1584760&tstart=1

MediaPlayer.frameworkのインポートの仕方が間違っていたようです。
普通にコピーするだけではいけないみたい。

いったいこのフレームワークはどこにあるのか調べていたら
こんなとこにありました。

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/System/Library/Frameworks

ここにあるMediaPlayer.frameworkを「既存のフレームワークを追加」で選択すればOK

一応エラーもなくビルドできました。

他のやり方があったら教えてください。

5/4追記

2回目以降の再生がバグっちゃうっていう人は
きちんとMPMoviePlayerPlaybackDidFinishNotificationでplayerを
releaseしないと2回目以降、再生がバグります。