Articles of mediarecorder

Android的MediaRecorder的getMaxAmplitude()函数实际上给了我什么?

Android MediaRecorder具有一项function .getMaxAmplitude(); 正如API告诉我的那样, “返回自上次调用此方法以来采样的最大绝对振幅。” 但我找不到这是什么幅度的? 它是帕斯卡还是瓦特? 我在网上的几个页面上发现,您可以使用(如此处所示 )计算与分贝密切相关的值。 double db = (20 * Math.log10(amplitude / REFERENCE)); 这会让我假设返回值是一些线性范围(可能像milipascal ……) REFERENCE = 0.1(我知道这应该是2 * 10 ^( – 5)Pascal((20 uPascal)),但是返回奇怪的值… 0.1奇怪地效果更好。) 现在我使用了测量MaxAmplitude() getMaxAmplitude() 并把它放入可变幅度 。 这是方法: public double getNoiseLevel() { //Log.d(“SPLService”, “getNoiseLevel() “); int x = mRecorder.getMaxAmplitude(); double x2 = x; Log.d(“SPLService”, “x=”+x); double db = (20 […]

MediaRecorder.stop()挂在Android 4.0(ICS)

在我的video捕获活动中调用stop() ,软件有时会挂起并且不会恢复生命。 只有通过点击“返回”触发ANR才能杀死活动。 在日志中,我看到以下一行一遍又一遍地重复: W / CameraSource(YYYYY):等待传入的摄像机video帧超时:XXXXXX us 有没有人见过这种行为? 有任何变通方法吗?

Android无法使用Front Facing Camera录制video,MediaRecorder启动失败:-19

我有两个不同的代码库有同样的问题。 第一个是直接从developer.android.com复制的代码: http : //developer.android.com/guide/topics/media/camera.html#custom-camera 第二个是这段代码: http://android-er.blogspot.com.au/2011/10/simple-exercise-of-video-capture-using.html 两者都可以正常使用后置摄像头,但是一旦我尝试使用前置摄像头,我就会收到错误消息。 这发生在以下设备上: Nexus S 4.1.2 Galaxy Nexus 4.1.2 Nexus 7 4.2.1(它只有前置摄像头) 我已经尝试过看起来像2.2时代的Camera Params,有些人声称需要一些三星和HTC设备,尽管有多篇不同的文章引用了不同的字符串键: c = Camera.open(frontFacingCameraID); // attempt to get a Camera instance Camera.Parameters params = c.getParameters(); params.set(“cam-mode”, 1); params.set(“cam_mode”, 1); params.set(“camera-id”, 1); c.setParameters(params); 这些都不起作用,请注意我正在检测Nexus 7上正确的前置摄像头ID:0。但是所有设备的结果都是一样的。 我尝试使用低质量的配置文件,我尝试过多种方式手动设置video分辨率,编码器,输出格式,比特率,帧速率和video大小,但没有一个有效。 让我觉得大多数代码没有错的事情是普通相机工作正常。 所以我的猜测是它与设置媒体记录器的prepareVideoRecorder()/ prepareMediaRecorder()方法有关。 也许Media Recorder手动编码已知可在前置摄像头上工作的设置? 我不得不说,Android Camera和MediaRecorder API很糟糕。 与iOS相比,它有点混乱,更不用说一些可怕的外观参数不兼容性问题和分散的设备环境中的不同分辨率。 假设我可以在我的JB设备上运行,有没有人从经验中知道这些问题是否已通过API 15 […]

如何将MediaRecorder中的video方向更改为纵向

当我通过MediaRecorder录制video时,它始终以横向模式录制,无论实际的设备方向如何。 如何强制MediaRecorder / Camera使用真正的方向?

我停止录制时MediaRecorder失败

我有这个错误。 有人可以帮助我,我认为这是关于触摸听众的事情……当我松开手指时会发生错误。 04-25 20:07:00.263: D/FB Sessions(18429): false 04-25 20:07:04.533: I/MediaRecorderJNI(18429): prepare: surface=0x189250 (identity=1813) 04-25 20:07:10.493: E/MediaRecorder(18429): stop failed: -1007 04-25 20:07:10.493: D/AndroidRuntime(18429): Shutting down VM 04-25 20:07:10.493: W/dalvikvm(18429): threadid=1: thread exiting with uncaught exception (group=0x40018608) 04-25 20:07:10.503: E/AndroidRuntime(18429): FATAL EXCEPTION: main 04-25 20:07:10.503: E/AndroidRuntime(18429): java.lang.RuntimeException: stop failed. 04-25 20:07:10.503: E/AndroidRuntime(18429): at android.media.MediaRecorder.stop(Native Method) 04-25 20:07:10.503: […]

MediaRecorder.stop()停止失败:-1007

我正在使用MediaRecorder录制video。 我的代码在2.3.3上工作正常但在4.0.3上失败。 问题如下:代码mediaRecorder.stop()抛出RuntimeExeption java.lang.RuntimeException: stop failed. at android.media.MediaRecorder.stop(Native Method) 使用LogCat消息 04-05 15:10:51.815: E/MediaRecorder(15709): stop failed: -1007 UPDATE 我发现,MediaPlayer几乎在启动后立即报告错误(通过MediaPlayer.OnErrorListener)。 错误代码为100(媒体服务器死机),额外-1007。 更新2准备MediaRecorder的代码 c = Camera.open(); … // Step 1: Unlock and set camera to MediaRecorder camera.unlock(); mediaRecorder.setCamera(camera); // Step 2: Set sources mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) CamcorderProfile […]

使用与生成的video文件不同的预览大小录制video

我试图允许用户录制与录制时可以看到的实际屏幕预览不同的video。 这篇文章似乎可以从有关getSupportedVideoSizes函数的文档中获得,该函数声明: 如果返回的列表不为null,则返回的列表将包含至少一个Size,如果将摄像机用作video源,则必须将返回列表中的一个大小传递给MediaRecorder.setVideoSize()以用于摄像机应用程序。 在这种情况下,预览的大小可以与video记录期间记录的video的分辨率不同。 这表明某些手机将从此fn返回null(根据我的经验,Galaxy SIII会这样做),但对于那些不这样做的手机,可以提供与实际video不同的分辨率的预览。 这种理解是否正确? 有些手机允许这种行为吗? 尝试解决方案: 在设置video录制的漫长过程中使用的setPreviewDisplay函数的官方描述中 ,提到: 如果使用null surface调用此方法或根本不调用此方法,则介质记录器将不会更改摄像机的预览表面。 这似乎是我想要的,但不幸的是,如果我这样做,整个video录制过程完全搞砸了。 我假设在录制video的过程中,此函数不能传递null或根本不调用。 也许在其他情况下这是可以的。 不幸的是,这似乎对我没有帮助。 我唯一接下来的步骤是查看TextureView并使用预览纹理而不是典型的SurfaceView实现,以便使用openGL将纹理拉伸到我想要的大小(不同于实际分辨率)(并裁剪屏幕上的任何多余部分) ),然后使用Surface的Surface(SurfaceTexture surfaceTexture)构造函数为setPreviewDisplay函数构造一个Surface。 由于ICS下面的不兼容性,我想避免使用TextureView ,并且因为这会增加显着的复杂性。 这似乎是一个微妙的过程,但我希望有人可以在这方面提供一些建议。 谢谢。

如何知道MediaRecorder是否处于运行状态?

我写了一个代码来logging使用MediaRecorder的通话对话audio。 如何知道MediaRecorder是否处于运行状态,停止录制。 喜欢 boolean running; MediaRecorder mr; //what should i assign to running? if(running){ mr.stop() } 上面的代码只是一个例子..如果你不明白我的问题,请告诉我..我会用实际的代码清楚地解释.. 我想知道的是“MediaRecorder在哪个状态?” – >录制/发布/准备/初始/等。

来电录音/处理服务! – Android

你好, 我正在开发Android的解决scheme,将logging呼叫(包括输出和input),并进一步处理logging的数据(在我的应用程序的终点,没有audio文件数据将保存在手机内存)。 我已经实现与PhoneStateListener.LISTEN_CALL_STATE BroadcastReceiver启动logging服务,如果状态是CALL_STATE_OFFHOOK。 然后在服务中,我开始一个尝试录制呼叫的新线程,以及另一个带有PhoneStateListener.LISTEN_CALL_STATE的BroadcastReceiver,如果电话状态更改为TelephonyManager.CALL_STATE_IDLE,则调用方法停止录制。 所创build的audio文件是空的。 我的服务中的recorder.stop()方法被调用时抛出exception。 错误在哪里? 我能做得更好吗? 首先(独立)BroadcastReceiver: package com.piotr.callerrecogniser; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; public class CallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { MyPhoneStateListener phoneListener = new MyPhoneStateListener(context); TelephonyManager telephony = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); } class MyPhoneStateListener extends […]

我怎样才能在Android中暂停录音?

我的目标是暂停录制文件。 我在Android开发人员网站上看到它的Media Recorder没有暂停选项。 Java支持以编程方式合并两个audio文件,但在android中不起作用。 join两个来自Java的WAV文件? 而且我也使用默认的设备录音机应用程序在所有设备上都可用,但在三星几乎没有设备录音path。 Intent intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); startActivityForResult(intent,REQUESTCODE_RECORDING); 任何一个帮助录音暂停function。