縦持ちカメラの録画された動画の向きが機種により異なる

424 views
Skip to first unread message

syun arai

unread,
Aug 16, 2013, 5:46:37 PM8/16/13
to android-g...@googlegroups.com
お世話になっております。荒井と申します。
現在、APILevel10以上をターゲットに端末を縦持ちで動画を撮影するカメラアプリを作成しようと考えております。

まず、manifestで画面はlandscapeで固定して
プレビューのSurfaceViewに関してはsetDisplayOrientation(90)で回転させ
出力されるmp4ファイルに関しては録画時にsetOrientationHint(270)で回転させる

というような作りで作成致しました。
この作りで、Nexus7、GalaxyNote、Optimasでは正常に(人の頭が画面の上方、胴が画面下方に来る)プレビューも動画ファイルの作成もなされたのですがMediasではプレビューは正常に表示されても録画された動画ファイルが天地逆になってしまう、という現象が起こりました。

今回、テストとして使用したのは上記4端末ですが、この状態では他の端末を使って録画して出来た動画ファイルも頭の位置が上下左右どちらに来るか、全く予測の付かない状態です。

また、動画として作成されたファイルがこのような状態であるとすれば、プレビュー用のSurfaceViewに関しても上記4端末ではたまたま正常(頭が上にくる)に表示されただけで、他の端末ではやはり90〜270度ずれた状態で表示される可能性もあります。

setDisplayOrientationやsetOrientationHintに固定値を与えているのが問題だと思われますので、それぞれ端末ごとに適切な値を動的に取得して与えてやりたいと思います。

この場合、皆様どのような値を取得して、どのような値を与えていらっしゃいますでしょうか?

以上、お忙しい所まことに恐縮ですが、何卒よろしくお願い致します。

syun arai

unread,
Aug 27, 2013, 3:45:26 AM8/27/13
to android-g...@googlegroups.com
お世話になっております。荒井です。

その後、この問題が機種依存以前にインカメラとアウトカメラの問題である事に気が付きましたのでご報告致します。

Nexus7、GalaxyNote、Optimasではアプリの作りとしてインカメラから取り込んだ像を用いる作りとなっておりました。
これに対し、Mediasではアウトカメラしか存在しない為、アウトカメラからの像の取り込みを行っておりました。

ここで、Androidの特性①として、画面上でSurfaceViewにプレビュー表示される像に関しては確かに画面を固定する事で正常に(人の頭が画面の上方、胴が画面下方に来る)ように表示されるようですが、録画されたmp4ファイルについては画面の固定するしないに関わらず、取り込まれた像は90度回転された状態で保存される特性があるという事に気が付きました。

また、Androidの特性②として、アウトカメラで撮影した像に対して、インカメラで撮影した像は鏡像になってしまう(例えばアウトカメラで文字を見てみると読めるが、インカメラで文字を見てみると鏡文字になってしまいとても読みづらい)という特性があることに気が付きました。

つまり、アウトカメラとインカメラで動画を撮影した場合、それぞれ180度反転して表示されてしまうようです。

それをsetOrientationHintで回転させていた為、今回の例ではアウトカメラで撮ったMediasのみ天地が逆転してしまったようでした。

お騒がせしてしまい、まことに申し訳御座いませんでした。

2013年8月17日土曜日 6時46分37秒 UTC+9 syun arai:
Reply all
Reply to author
Forward
0 new messages