iPhoneでMediaPlayer.frameworkを使って動画を再生する方法
アプリ開発でつまずいたところを書いていきたいと思います。
再生できるビデオフォーマット
- H.264 Baseline Profile
- MPEG4 Part2 Simple Profile
- 最大 640x480 最大30fps
- 最大2.5Mbps
- 音声は最大160kbpsのAAC-LC 48kHz
- 対応拡張子
- mp4/m4v/mov/.3gp
簡単に動画をつくりたい場合は
iMovieを利用すると簡単にできます。
写真だけでスライドショー動画がつくれるので
サンプルアプリをつくるのに有効ですね。
MediaPlayer.frameworkとりこみ
iPhoneのiTunesのビデオを再生するような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回目以降、再生がバグります。