gpt4 book ai didi

java - MediaRecorder - setOrientationHint() 异常/失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:11:06 24 4
gpt4 key购买 nike

数周以来,我一直在尝试通过打开和关闭 MediaRecorder 视频旋转来解决此问题。我无法让行 setOrientationHint(90) 在运行 Android 2.3.3 (SDK 10) 的物理三星 Galaxy S1 上工作。这应该可以在 SDK 9 以上的任何版本上正常运行。

当我调用 setOrientationHint(90) 时出现异常:setParameters(video-param-rotation-angle-degrees=90) failed。详细的错误详情如下。

因此,我不得不检查 SDK,并且仅在 SDK>10 时才调用 setOrientationHint()。也就是说,这段代码在我测试过的所有其他 10 以上的 SDK 版本上都可以正常工作。我已经在运行 4.2.2 的 Samsung Galaxy Nexus 上进行了测试并且工作正常。

这是我的代码:(缩减以显示对 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 只是一个实用程序函数,用于打印要记录的调试和错误语句。希望这对其他人有帮助...

最佳答案

查看您所附的日志,运行 Android 2.3.3 的 Samsung Galaxy S1 似乎不支持 setOrientationHint。这是 AuthorDriver.cpp 中的代码

PVMFStatus AuthorDriver::setParameter(
const String8& key, const String8& value) {
if (key == "max-duration") {
int64_t max_duration_ms;
if (safe_strtoi64(value.string(), &max_duration_ms)) {
return setMaxDurationOrFileSize(
max_duration_ms, true /* limit_is_duration */);
}
} else if (key == "max-filesize") {
int64_t max_filesize_bytes;
if (safe_strtoi64(value.string(), &max_filesize_bytes)) {
return setMaxDurationOrFileSize(
max_filesize_bytes, false /* limit is filesize */);
}
} else if (key == "audio-param-sampling-rate") {
int64_t sampling_rate;
if (safe_strtoi64(value.string(), &sampling_rate)) {
return setParamAudioSamplingRate(sampling_rate);
}
} else if (key == "audio-param-number-of-channels") {
int64_t number_of_channels;
if (safe_strtoi64(value.string(), &number_of_channels)) {
return setParamAudioNumberOfChannels(number_of_channels);
}
} else if (key == "audio-param-encoding-bitrate") {
int64_t audio_bitrate;
if (safe_strtoi64(value.string(), &audio_bitrate)) {
return setParamAudioEncodingBitrate(audio_bitrate);
}
} else if (key == "video-param-encoding-bitrate") {
int64_t video_bitrate;
if (safe_strtoi64(value.string(), &video_bitrate)) {
return setParamVideoEncodingBitrate(video_bitrate);
}
}

// Return error if the key wasnt found
LOGE("AuthorDriver::setParameter() unrecognized key \"%s\"", key.string());
return PVMFErrArgument;
}

Samsung Galaxy S1 和 Android 2.3.3 不支持 key video-param-rotation-angle-degrees

您可以比较 Nexus 4.2.2 和 S1 2.3.3 之间的日志,看看您是否发现任何明显的差异。

关于java - MediaRecorder - setOrientationHint() 异常/失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com