私はMediaStore.ACTION_VIDEO_CAPTURE
インテントを使用してビデオをキャプチャし、後でVideoView
. 撮影した動画の向きを知りたいです。
ユーザーがシャッターボタンを押す前にデバイスを回転させる可能性があるため、インテント呼び出し時に向きを使用したくありません。また、独自のカスタム ビデオ キャプチャを実装したくありません。
ビデオの向きは、保存されたファイルに保存されているか、インテントの結果に返されていますか?
私はMediaStore.ACTION_VIDEO_CAPTURE
インテントを使用してビデオをキャプチャし、後でVideoView
. 撮影した動画の向きを知りたいです。
ユーザーがシャッターボタンを押す前にデバイスを回転させる可能性があるため、インテント呼び出し時に向きを使用したくありません。また、独自のカスタム ビデオ キャプチャを実装したくありません。
ビデオの向きは、保存されたファイルに保存されているか、インテントの結果に返されていますか?
ビデオの向きは、保存されたファイルに保存されているか、インテントの結果に返されていますか?
AOSPVideoCamera
アクティビティは、カメラ デバイスの回転値をMediaRecorder.setOrientationHint()
メソッドに提供します。VideoCamera.initializeRecorder()
これに関連するコード内のコードの抜粋を次に示します。
// See android.hardware.Camera.Parameters.setRotation for
// documentation.
// Note that mOrientation here is the device orientation, which is
// the opposite of what getWindowManager().getDefaultDisplay().getRotation()
// would return, which is the orientation the graphics need to rotate
// in order to render correctly.
int rotation = 0;
if (mOrientation != OrientationEventListener.ORIENTATION_UNKNOWN) {
CameraInfo info = CameraHolder.instance().getCameraInfo()[mCameraId];
if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
rotation = (info.orientation - mOrientation + 360) % 360;
} else { // back-facing camera
rotation = (info.orientation + mOrientation) % 360;
}
}
mMediaRecorder.setOrientationHint(rotation);
setOrientationHint()
情報の保存について説明するドキュメントは次のとおりです。
出力ビデオ再生の向きのヒントを設定します。このメソッドは、prepare() の前に呼び出す必要があります。このメソッドは、ビデオ録画中にソース ビデオ フレームの回転をトリガーしませんが、出力形式が OutputFormat.THREE_GPP または OutputFormat.MPEG_4 の場合、出力ビデオに回転角度を含む構成マトリックスを追加して、ビデオ プレーヤーが適切なフレームを選択できるようにします。再生の向き。一部のビデオ プレーヤーは、再生中にビデオの構成マトリックスを無視することを選択する場合があることに注意してください。
フレームワークのVideoView
ウィジェットを使用してビデオを再生しているため、構成マトリックスの情報は既に正しく処理されているはずであり、ビデオの幅と高さを比較して、再生の向きを横向きにするか縦向きにするかを決定するだけで済みます。アクティビティ。これを行う簡単な方法の 1 つは、ThumbnailUtils.createVideoThumbnail()
(内部的に を使用するMediaMetaDataRetriever
) を呼び出して、返されたビットマップの解像度を確認することです。
どのようにアルに似ています。彼の答えで提案されているように、私はを使用しますMediaMetadataRetriever
が、METADATA_KEY_VIDEO_ROTATION
キーは次のとおりです。
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource( absoluteVideoFilePath );
String orientation = mediaMetadataRetriever.extractMetadata(
MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION );
フロントカメラの4つの異なる方向すべてでビデオをキャプチャすることを確認しましたが、メタデータは常に異なります. 注: METADATA_KEY_VIDEO_ROTATION
API レベル 17 以上が必要です。
MediaMetadataRetrieverを使用して、ビデオの幅と高さを取得し、ロードする前に方向を把握することができます。