Life, Education, Death

プログラミング以外でも思ったことをつらつらと書きたい

iOS側でカメラを使って撮った動画をAndroidで再生したいのですが

作ってるアプリで欲しかった機能についてかなりハマりながらもやっとどうにかなったのでメモ。
iOSで撮った動画をAndroidでもどうこうしたいってのがニーズが少ないんだろう…全然ぐぐっても出てこなかった。

環境

iOS:iPhone4
Android:Galaxy S2(Android 4.0.3)

結論

  • movはAndroidで再生しづらいのでmp4が無難

細かいところはちょろちょろ書きます

iOS

標準カメラだとmovで保存されてしまうので自前でカメラアプリを実装する必要がある。
よく見たら

という定数があってmp4で書き出すことが標準ライブラリで出来ました


カメラを自分でちゃんと実装するのは大変そうだったのでPBJVisionというライブラリを使っている。
PBJVisionは投稿時点では、kUTTypeQuickTimeMovieを指定して書き出されていたのでうまくAndroid側で再生できていなかった。
kUTTypeQuickTimeMovie -> kUTTypeMPEG4に書き換えて使った

Android

Androidが標準でサポートしているフォーマットは以下の通り。当然QuickTime形式はありません。
http://developer.android.com/guide/appendix/media-formats.html

ファイルフォーマットがmp4になってしまえばあとはAndroid標準のMediaPlayerクラスを使って再生する実装を行うだけ
この辺りを参考にしつつ実装を進めました。

MediaPlayerにサポート外のファイルを渡した場合にIOExceptionが発生した

具体的に書くと、PBJVisionをそのまま使っていたのでkUTTypeQuickTimeMovieで書き出した、.mp4ファイルを再生しようとして
MediaPlayer.setDataSourceを呼んだときに

java.io.IOException: setDataSourceFD failed.: status=0x80000000

という例外が発生していた。kUTTypeMPEG4を指定して書き出した場合にはうまく再生出来たのでAndroidで再生出来ない形式になってしまっていたというふうに考えている。これ以上詳細は調べられていないので何か知っている人がいたら教えて欲しいところ。

まとめ

カメラアプリでiOS-Android連携って聞かないからハマってもしょうがないのかも。

無事、iOSで撮った動画がAndroidで再生できました。