尽管以纵向视图录制,但使用 mediaRecorder 和表面视图录制的 Android 视频无法在横向视图中播放

Posted

技术标签:

【中文标题】尽管以纵向视图录制,但使用 mediaRecorder 和表面视图录制的 Android 视频无法在横向视图中播放【英文标题】:Android video recorded using mediaRecorder and surface view doesn't play in Landscape View although recorded in Portrait View 【发布时间】:2016-08-01 05:10:05 【问题描述】:

我正在开发一个应用程序,我必须在其中录制一个应该在 Portrait View 中的视频,并在 Portrait View 中播放它。我正在使用mediaRecorder 录制视频。

已使用本站作为参考:https://examples.javacodegeeks.com/android/core/android-video-capture-example/

并根据我的要求进行了细微的更改:

代码如下:

对于相机,我使用以下设置:

mCamera = Camera.open(findFrontFacingCamera());
            mCamera.setDisplayOrientation(90);
            Camera.Parameters params= mCamera.getParameters();
            params.set("rotation", 90);
            params.set("orientation", "portrait");
            mCamera.setParameters(params);
            mPreview.refreshCamera(mCamera);

我现在面临的问题是视频在Portrait View 中被录制(看起来是这样),但是当我使用任何播放器播放它时,例如。 MX Player 我得到一个在Landscape View 录制/播放的视频。

以下是供参考的屏幕:

播放的视频:

我使用了setDisplayOrientation(90) 参数,但它不起作用。 我如何实现我想要实现的目标?

【问题讨论】:

【参考方案1】:

ios 相机不同,我们无法在 Android 上真正选择人像相机框架方向。

Camera.setDisplayOrientation()仅指摄像头实时预览视频的方向;实际的帧数据永远不会在 Android 上旋转。如果您使用 onPreviewFrame() 回调,您可以看到它。 Camera.setRotation() 仅影响 onPictureTaken() 回调,并且在大多数设备上仅设置 EXIF 旋转标志。

通过名称显式设置“旋转”和“方向”是危险的:一些设备可能会识别这些键,其他设备会默默地忽略它们,而其他 ROM 可能会在 Camera.setParameters() 具有意外键或值的参数时抛出 RuntimeException已收到。但无论如何,我从来没有见过在任何这些标志时更改录制的视频帧的 Android 设备。

您有MediaRecorder.setOrientationHint() API,但它不会旋转录制视频的帧,只会在视频标题中放置一个标志。

因此,很遗憾,您必须在接收端旋转视频。这取决于您渲染视频的方式,是的,您可以根据需要检查方向提示。

【讨论】:

有什么建议可以让我自己做吗?您知道的任何参考来源? 我也已经使用了 setOrientationHint() 但它仍然无法正常工作。 “不工作”是什么意思?你检查接收器上的这个标志吗? 如何渲染视频?如果你使用 OpenGL 纹理,你可以应用一个变换矩阵,比如***.com/questions/29518560/… 我想我明白了问题所在。我一直在运行 6.0.1 的 Nexus 7 上测试该应用程序。当我在其他设备上测试时:三星 S3、松下 Eluga One、华硕 Zenphone 2、MI4i、Moto G3,我发现它工作正常。所以我认为nexus 7有问题。感谢您的帮助!

以上是关于尽管以纵向视图录制,但使用 mediaRecorder 和表面视图录制的 Android 视频无法在横向视图中播放的主要内容,如果未能解决你的问题,请参考以下文章

尽管我是纵向录制的,但横向视频播放

Android 如何使用 MediaRecorder 录制音频并输出为原始 PCM?

以最小文件大小连续录制。 AudioRecord 或 MediaRecorder?

为啥 MediaRecorder 延迟开始录制?

MediaRecorder 没有第二次录制

使用 MediaRecorder 录制时的音频质量问题