Android上捕获的视频不会旋转到纵向
Posted
技术标签:
【中文标题】Android上捕获的视频不会旋转到纵向【英文标题】:Captured video on Android won't rotate to portrait 【发布时间】:2012-02-09 17:20:06 【问题描述】:我正在尝试在 android 上使用 MediaRecorder 流式传输视频,屏幕固定为纵向模式 (android:screenOrientation="portrait")。相机硬件自然与横向模式对齐。我可以将预览视频显示旋转 90 度,以便本地预览在纵向模式下正确显示。但是捕获的视频仍然是 90 度外:
Camera mCamera;
MediaRecorder mMediaRecorder;
...
mCamera.setDisplayOrientation(90);
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
Parameters params = mCamera.getParameters();
params.setRotation(90);
mCamera.setParameters(params);
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
params.setRotation 似乎对捕获的视频没有任何影响。我的目标 API 是 Android 2.2。我的测试硬件是 Android 3.1。
关于如何旋转捕获的视频有什么想法吗?还是根本不可能?
【问题讨论】:
出于好奇,为什么params.setRotation...
会超过180? 180度不会把它变成一个向后的风景吗?不应该是params.setRotation(90)
吗?
@MikeGates 我之前尝试过各种值,看看是否有任何效果。已将 sn-p 编辑回所需的值。感谢您指出。
你解决了这个问题吗?
【参考方案1】:
试试这个:
mediaRecorder.setOrientationHint(rotation); // eg rotation=270
【讨论】:
这给我一个错误'java.lang.RuntimeException:setParameter failed。'在装有 Android 2.3.3 的三星 Galaxy S 中 @sgallego 你需要在 mediaRecorder.prepare() 之前调用它。如果需要,请重置()它。【参考方案2】:我知道你的问题,
视频使用Media Recorder
from Camera
,所以你需要rotate Media Recorder
。使用下面的代码应该可以解决您的问题。
/**
*
* @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;
应该在prepare()
方法之前添加:
// Step 5: Set the preview output
/**
* Define Orientation of image in here,
* if in portrait mode, use value = 90,
* if in landscape mode, use value = 0
*/
CustomCamera.mMediaRecorder = Utils.rotateBackVideo(CustomCamera.mMediaRecorder);
CustomCamera.mMediaRecorder.setPreviewDisplay(mCameraPreview.getHolder().getSurface());
谢谢
【讨论】:
以上是关于Android上捕获的视频不会旋转到纵向的主要内容,如果未能解决你的问题,请参考以下文章
Android - 在使用WebRTC发送到Wowza Streaming Engine之前旋转视频帧
android studio中的纵向到横向视频视图和控制器重启问题
Cordova 媒体捕获插件错误(Nexus 6、Android 6)