5

基本的に、どのカメラを使用して撮影したかに応じて、ビデオを回転させたいと思います。

前面カメラは 90 度でミラーリングされますが、背面カメラは適切に表示されます。現在、最初のクリップに従ってマトリックスを設定します。最初のクリップがフロント カメラで作成された場合、すべてのクリップが 270 度回転し、その逆も同様です。

サンプル コードは次のとおりです (rotationsはクリップの回転を含むArrayList です)。

for (TrackBox trackBox : trackBoxes) {
       Log.d("TRACKBOX", String.valueOf(rotations.get(i)));
       //trackBox.getTrackHeaderBox().setMatrix(Matrix.ROTATE_90);
       if (rotations.get(i) == 90) { //if clip was made with back camera
              trackBox.getTrackHeaderBox().setMatrix(Matrix.ROTATE_90);
              Log.d("Rotating to:", "90 degrees");

       } else if (rotations.get(i) == 270) { // if clip was made with front camera
              trackBox.getTrackHeaderBox().setMatrix(Matrix.ROTATE_270);
              Log.d("Rotating to:", "270 degrees");
       }
       m.addTrack(new Mp4TrackImpl(trackBox));

}
inMovies[i] = m;
4

1 に答える 1

-1

実際、これらのコードを使用してビデオを回転できます。複雑な mp4 パーサー ライブラリを使用する必要はありません。

/**
 *
 * @param mMediaRecorder
 * @return
 */
public static MediaRecorder rotateBackVideo(MediaRecorder mMediaRecorder) {
    /**
     * Define Orientation of video in here,
     * if in portrait mode, use value = 90,
     * if in landscape mode, use value = 0
     */
    switch (CustomCamera.current_orientation) {
        case 0:
            mMediaRecorder.setOrientationHint(90);
            break;
        case 90:
            mMediaRecorder.setOrientationHint(180);
            break;
        case 180:
            mMediaRecorder.setOrientationHint(270);
            break;
        case 270:
            mMediaRecorder.setOrientationHint(0);
            break;
    }

    return mMediaRecorder;
}

/**
 *
 * @param mMediaRecorder
 * @return
 */
public static MediaRecorder rotateFrontVideo(MediaRecorder mMediaRecorder) {
    /**
     * Define Orientation of video in here,
     * if in portrait mode, use value = 90,
     * if in landscape mode, use value = 0
     */
    switch (CustomCamera.current_orientation) {
        case 0:
            mMediaRecorder.setOrientationHint(270);
            break;
        case 90:
            mMediaRecorder.setOrientationHint(180);
            break;
        case 180:
            mMediaRecorder.setOrientationHint(90);
            break;
        case 270:
            mMediaRecorder.setOrientationHint(0);
            break;
    }

    return mMediaRecorder;
}
于 2015-04-01T08:50:32.030 に答える