setOrientationHint()对Gingerbread没有任何作用,但适用于更高版本

时间:2013-02-13 15:27:27

标签: android

我正在尝试在portrait orientation中录制视频。

将相机DisplayOrientation设置为90度,可以在portrait中显示视频预览。

但是当使用任何给定数字(0,90,180,270)调用setOrientationHint()时,创建的视频始终以纵向方式创建。

当我在Jellybean和ICS上测试时,我使用setOrientationHint()方法设置了视频方向。

这是MediaRecorder初始化代码:

private void initRecorder() {
    Camera camera = Camera.open();
    camera.setDisplayOrientation(90);
    camera.unlock();
    recorder.reset();
    recorder.setCamera(camera);
    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
    file = new File("/sdcard/test.mp4");
    if (!file.exists()) {
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    recorder.setOrientationHint(90);//doesn't seem to work on 2.3

    recorder.setOutputFile(file.getAbsolutePath());
    recorder.setMaxDuration(30000);
    recorder.setMaxFileSize(1000000);
}

这是我准备MediaRecorder

的地方
public void surfaceCreated(SurfaceHolder holder) {
    this.holder = holder;
        recorder.setPreviewDisplay(holder.getSurface());
    try {
        recorder.prepare();
    } catch (IllegalStateException e) {
        e.printStackTrace();
        finish();
    } catch (IOException e) {
        e.printStackTrace();
        finish();
    }
}

编辑:

经过测试:

  1. 三星Galaxy S运行Android 2.2。

  2. 三星Galaxy W运行android 2.3。

  3. 运行ICS的三星galaxy S2 - 工作

  4. 运行Jelly Bean的三星galaxy s3 - 工作

1 个答案:

答案 0 :(得分:2)

需要在setOrientationHint()之前调用

prepare()。检查是否发生这种情况。

另请注意,此方法仅适用于3gppmpeg4格式,并且某些视频播放器选择完全忽略此属性。您正在使用的视频播放器可能会忽略它。