几周以来,我一直在尝试通过MediaRecorder
打开和关闭视频旋转来解决这个问题。我无法让线路setOrientationHint(90)
在运行的物理三星 Galaxy S1 上工作Android 2.3.3
( SDK 10
)。这应该在上面的任何东西上运行良好SDK 9
。
当我打电话时,setOrientationHint(90)
我得到一个例外:setParameters(video-param-rotation-angle-degrees=90) failed
。详细错误详情如下。
结果,我不得不检查 SDK,并且只有setOrientationHint()
在 SDK>10 时才调用。即,此代码在我测试过的所有其他高于 10 的 SDK 版本上都可以正常工作。我已经在运行三星 Galaxy Nexus 上进行了测试4.2.2
并且工作正常。
这是我的代码:(减少以显示调用顺序MediaRecorder
)
mCamera = getCameraInstance();
mCamera.setPreviewDisplay(holder);
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setOrientationHint(90);
// Step 1: Unlock and set camera to MediaRecorder
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
// Step 2: Set sources
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// Step 3: recording setup
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoSize(720,480);
mMediaRecorder.setVideoFrameRate(15);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
// Step 4: Set output file
currentOutputFileName = DIRECTORY_PATH + "zzzz"+ iCount +".mp4";
mFile = new File(currentOutputFileName);
mMediaRecorder.setOutputFile(mFile.getAbsolutePath());
// Step 4.1: Set recording length
mMediaRecorder.setMaxDuration(10000);
// Step 5: Set the preview output
mMediaRecorder.setPreviewDisplay(cameraView.getHolder().getSurface());
// Step 6: Prepare configured MediaRecorder
mMediaRecorder.prepare();
有人遇到过这个问题吗?我找不到其他人正在经历这种情况,我不敢相信就是这样。它可能只是运行 2.3.3 问题的澳大利亚三星 Galaxy S1 吗?
我看到有人提到有人在这条线运行时遇到问题,但实际视频没有旋转,但我实际上收到了一个异常 - 这条线根本没有运行。我已经检查并重新检查了命令顺序,看起来很好。我认为最重要的是setOrientationHint()
命令发生在之前mediaRecorder.prepare()
这是错误:
AuthorDriver::setParameter() unrecognized key "video-param-rotation-angle-degrees"
setParameter(video-param-rotation-angle-degrees = 90) failed with result -5
Ln 1047 handleSetParameters("video-param-rotation-angle-degrees=90") error
Command (12) failed
setParameters(video-param-rotation-angle-degrees=90) failed: -2147483648
Shutting down VM
threadid=1: thread exiting with uncaught exception (group=0x40015578)
FATAL EXCEPTION: main
java.lang.RuntimeException: setParameter failed.
at android.media.MediaRecorder.setParameter(Native Method)
at android.media.MediaRecorder.setOrientationHint(MediaRecorder.java:341)
at com.on3x.emergency.Recorder.prepareVideoRecorder(Recorder.java:196)
at com.on3x.emergency.Recorder.startRecording(Recorder.java:90)
at com.on3x.emergency.GUI.RecordActivity$1.onClick(RecordActivity.java:86)
at android.view.View.performClick(View.java:2538)
at android.view.View$PerformClick.run(View.java:9152)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Force finishing activity com.on3x.emergency/.GUI.RecordActivity
Dumpstate > /data/log/dumpstate_app_error
如果有人可以提供任何帮助,将不胜感激。现在我不得不告诉我们的客户,我现在无法解决这个问题,视频必须横着放。
还有其他旋转视频的方法吗?基本上我的应用程序记录视频并将它们上传到服务器。目前这款 2.3.3 手机无法旋转视频,所以它横向上传
干杯
编辑: 这是我现在拥有的代码。正如 Ashish Gupta 所建议的,AuthorDriver 在运行 2.3.3 的三星 Galaxy S1(澳大利亚型号)上不包含适当的参数
if (android.os.Build.VERSION.SDK_INT>=9) {
// attempt to rotate the video 90 degrees.
try {
mMediaRecorder.setOrientationHint(90);
Utils.logLine("orientation rotated 90", this, Utils.LOG_TYPE_DEBUG);
} catch (Exception e) {
Utils.logLine("error trying setOrientationHint"+ e.getMessage(), this, Utils.LOG_TYPE_ERROR, e);
e.printStackTrace();
}
} else {
Utils.logLine("orientation set skipped ", this, Utils.LOG_TYPE_DEBUG);
}
注意:Utils.logLine 只是一个实用程序函数,用于打印调试和错误语句以记录日志。希望这可以帮助别人......