如何将 MediaRecorder 中的视频方向更改为纵向

Posted

技术标签:

【中文标题】如何将 MediaRecorder 中的视频方向更改为纵向【英文标题】:how to change video orientation in MediaRecorder to portrait 【发布时间】:2010-10-10 16:12:55 【问题描述】:

当我通过 MediaRecorder 录制视频时,它总是以横向模式录制,无论实际设备方向如何。 如何强制 MediaRecorder/Camera 使用真实方向?

【问题讨论】:

如何在清单中设置您的 CameraActivity 的 android:screenOrientation="landscape" 【参考方案1】:

请参阅Camera.Parameters.setRotation() 了解更多信息。

那里有一个例子,而不是调用 setRotation(rotation) 尝试在录制视频时调用 mediaRecorder.setOrientationHint(rotation)。

【讨论】:

mediaRecorder.setOrientationHint 只改变输出视频的方向,不改变预览的方向。 此外,setOrientationHint 仅适用于 MPEG4 流。其他人(如 MPEG2TS)没有实现这个选项(它被默默地忽略)。 @Cat 你是对的,知道如何在预览中解决这个问题吗?!! @Lekensteyn 如何在录制视频时为 MPEG2TS 格式应用 setOrientationHint()。 请注意,setOrientationHint 仅适用于 2 种格式:“OutputFormat.MPEG_4”和“OutputFormat.THREE_GPP”。更多信息:developer.android.com/reference/android/media/…【参考方案2】:

添加以下两行代码:

Camera.setDisplayOrientation(90); // use for set the orientation of the preview
mRecorder.setOrientationHint(90); // use for set the orientation of output video

之前:

mRecorder.setCamera(mCamera);

完整示例:

mRecorder = new MediaRecorder();

// Both are required for Portrait Video
mCamera.setDisplayOrientation(90);
mRecorder.setOrientationHint(90);

// Step 1: Unlock and set camera to MediaRecorder
mCamera.unlock();
mRecorder.setCamera(mCamera);

// Step 2: Set sources
mRecorder.setAudiosource(MediaRecorder.AudioSource.DEFAULT);
mRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);

// Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
mRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_480P));

【讨论】:

【参考方案3】:

在这里查看文档

http://developer.android.com/guide/topics/media/camera.html#capture-video

这个例子最常见的陷阱是 setCamera() 。您必须在制作 MediaRecorder 后立即设置相机,否则会出错。

    Camera mCamera = getCameraInstance();
    // adjust the camera the way you need
    mCamera.setDisplayOrientation(90);

    MediaRecorder recorder = new MediaRecorder();

    mCamera.unlock();
    recorder.setCamera(mCamera);

    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
    recorder.setOutputFile(filePath);

    // add any limits
    recorder.setMaxDuration(50000); // 50 seconds
    recorder.setMaxFileSize(5000000); // Approximately 5 megabytes 

我希望这对某人有所帮助。祝你好运!!

【讨论】:

此代码将失败,除非您在 recorder.setCamera(mCamera) 之前调用 mCamera.unlock();:developer.android.com/reference/android/hardware/…【参考方案4】:

我以前也遇到过这个问题。我发现你可以使用函数setOrientationHint(API 9)。在调用 MediaRecorder.prepare() 之前调用此函数。您可以设置输出视频的方向度。

希望对你有帮助,祝你好运!

【讨论】:

实际上并没有将视频旋转到正确的方向,它只是一个设置为视频的标志,一些媒体播放器(如 vlc)会忽略。【参考方案5】:
 mMediaRecorder = new MediaRecorder();
        mServiceCamera.setDisplayOrientation(90);
        mMediaRecorder.setOrientationHint(90);
        mServiceCamera.unlock();
        mMediaRecorder.setCamera(mServiceCamera);
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));

【讨论】:

以上是关于如何将 MediaRecorder 中的视频方向更改为纵向的主要内容,如果未能解决你的问题,请参考以下文章

我们如何使用 mediaRecorder 将画布流与音频流混合

MediaRecorder - 如何在录制时播放视频块/块?

使用 MediaRecorder 将音频和视频流合并为一个文件 [重复]

Android 10 源码MediaRecorder 录像流程:MediaRecorder 配置

如何使用 getUsermedia 和 mediaRecorder 下载录音并给出视频规范?

mediarecorder 如何暂停和恢复录制视频