MediaRecorder启动错误代码
我想录制没有声音的原始h.264视频,并且可能硬件加速(并在稍后流式传输)。 所以我决定使用MediaRecorder
(以及用于流式传输的套接字入侵)。
我有以下代码:
final MediaRecorder recorder = new MediaRecorder();
final Camera camera = Camera.open();
camera.unlock();
recorder.setCamera(camera);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
final CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
recorder.setVideoSize(profile.videoFrameWidth, profile.videoFrameHeight);
recorder.setVideoFrameRate(profile.videoFrameRate);
recorder.setVideoEncodingBitRate(profile.videoBitRate);
recorder.prepare();
recorder.start();
而巴姆! 这在logcat中:
E/MediaRecorder﹕ start failed: -38
我开始使用Google,并发现了很多问题和答案,但没有一个关于我的错误代码-38
。
所以我试着看Android的源代码,并注意到它是native
方法,我不知道在哪里寻找。
所以我最大的问题是: 是否有这些错误代码的列表,所以我可以找到什么错误-38
意味着?
也知道tjat我瞄准API 10(姜饼)和建设与最新的SDK 21。
好的,我想我有一个答案给你。 失败的开始函数在名为mediarecorder.cpp
的文件中定义。 在这里找到:
frameworks/av/media/libmedia/mediarecorder.cpp
这个启动函数返回一个status_t
类型的变量,并且对应于你所看到的错误。
现在,类型status_t
被定义在一个名为Errors.h
的文件中,可以在这里找到:
system/core/include/utils/Errors.h
这定义了一个与status_t
相对应的枚举,如下所示:
enum {
OK = 0, // Everything's swell.
NO_ERROR = 0, // No errors.
UNKNOWN_ERROR = 0x80000000,
NO_MEMORY = -ENOMEM,
INVALID_OPERATION = -ENOSYS,
BAD_VALUE = -EINVAL,
BAD_TYPE = 0x80000001,
NAME_NOT_FOUND = -ENOENT,
PERMISSION_DENIED = -EPERM,
NO_INIT = -ENODEV,
ALREADY_EXISTS = -EEXIST,
DEAD_OBJECT = -EPIPE,
FAILED_TRANSACTION = 0x80000002,
JPARKS_BROKE_IT = -EPIPE,
#if !defined(HAVE_MS_C_RUNTIME)
BAD_INDEX = -EOVERFLOW,
NOT_ENOUGH_DATA = -ENODATA,
WOULD_BLOCK = -EWOULDBLOCK,
TIMED_OUT = -ETIMEDOUT,
UNKNOWN_TRANSACTION = -EBADMSG,
#else
BAD_INDEX = -E2BIG,
NOT_ENOUGH_DATA = 0x80000003,
WOULD_BLOCK = 0x80000004,
TIMED_OUT = 0x80000005,
UNKNOWN_TRANSACTION = 0x80000006,
#endif
FDS_NOT_ALLOWED = 0x80000007,
};
正如你所看到的,这里的一些值来自errno.h
,所以我们只需要看看哪一个值等于38。
根据这个来源,38对应于ENOSYS
。 所以,如果我们回顾一下status_t枚举,我们可以看到在android中, ENOSYS
对应于一个无效的操作。 不是非常有帮助,但我希望这至少可以让你朝正确的方向发展。
我在通话记录器应用程序中遇到了这个错误代码。 此错误代码将在logcat中显示,当您在其他应用程序(如语音助手)(如:谷歌等)或其他通话记录器应用程序Microphone is in use
时启动媒体录制器。