- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我打算使用此应用程序对通话进行录音。但是当我将 audioSource 设置为 MediaRecorder.AudioSource.VOICE_CALL 时,它给出了一个错误,但是当 audioSource 设置为 MediaRecorder.AudioSource.MIC 时,它工作得很好。我不确定问题出在哪里。问题的 logcat 如下。非常感谢任何形式的帮助。谢谢。
public class IncomingCallReceiver extends BroadcastReceiver {
private MediaRecorder mRecorder;
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if(null == bundle)
return;
String state = bundle.getString(TelephonyManager.EXTRA_STATE);
if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING))
{
}
else if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_OFFHOOK)){
Log.i("TelephonyManager", "Call picked up");
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setAudioEncodingBitRate(16);
mRecorder.setAudioSamplingRate(44100);
mRecorder.setOutputFile("/sdcard/Recording/callrecord.mp4");
try{
mRecorder.prepare();
}
catch(IOException e){
}
mRecorder.start();
Log.i("StartRecordingCall", "Recording Call end");
}
else if (state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_IDLE)){
Log.i("TelephonyManager", "Call hunged up");
mRecorder.stop();
mRecorder.release();
mRecorder=null;
}
}
/
12-18 20:15:56.755: E/MediaRecorder(1577): start failed: -2147483648
12-18 20:15:56.755: D/AndroidRuntime(1577): Shutting down VM
12-18 20:15:56.755: W/dalvikvm(1577): threadid=1: thread exiting with uncaught exception (group=0x2b542210)
12-18 20:15:56.765: E/AndroidRuntime(1577): FATAL EXCEPTION: main
12-18 20:15:56.765: E/AndroidRuntime(1577): java.lang.RuntimeException: start failed.
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.media.MediaRecorder.start(Native Method)
12-18 20:15:56.765: E/AndroidRuntime(1577): at com.example.callrecorder.MainActivity.startRecording(MainActivity.java:447)
12-18 20:15:56.765: E/AndroidRuntime(1577): at com.example.callrecorder.MainActivity.onClick(MainActivity.java:279)
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.view.View.performClick(View.java:3534)
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.view.View$PerformClick.run(View.java:14263)
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.os.Handler.handleCallback(Handler.java:605)
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.os.Handler.dispatchMessage(Handler.java:92)
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.os.Looper.loop(Looper.java:137)
12-18 20:15:56.765: E/AndroidRuntime(1577): at android.app.ActivityThread.main(ActivityThread.java:4441)
12-18 20:15:56.765: E/AndroidRuntime(1577): at java.lang.reflect.Method.invokeNative(Native Method)
12-18 20:15:56.765: E/AndroidRuntime(1577): at java.lang.reflect.Method.invoke(Method.java:511)
12-18 20:15:56.765: E/AndroidRuntime(1577): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-18 20:15:56.765: E/AndroidRuntime(1577): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-18 20:15:56.765: E/AndroidRuntime(1577): at dalvik.system.NativeStart.main(Native Method)
最佳答案
您运行应用的设备可能根本不支持语音通话录音,或者不喜欢您尝试设置的一个或多个参数。
例如,您可以尝试使用 8000 Hz 采样率而不是 44100 Hz(无论如何 44100 Hz 对 AMR-NB 毫无意义)并完全摆脱对 setAudioEncodingBitRate
的调用。
您的代码的另一个潜在问题是您的 BroadcastReceiver
对象中有 MediaRecorder
实例,但没有将其声明为静态。以下是 Android 文档中关于 BroadcastReceivers 的内容:
A BroadcastReceiver object is only valid for the duration of the call to onReceive(Context, Intent). Once your code returns from this function, the system considers the object to be finished and no longer active.
换句话说,当您收到包含 EXTRA_STATE_IDLE
的广播时,您期望存在的 MediaRecorder
实例实际上可能不再存在,因为您在不同的 BroadcastReceiver
实例而不是创建 MediaRecorder
的实例。
关于android - MediaRecorder 启动失败 -2147483648,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13933065/
我正在为 chrome 商店构建一个屏幕录像机插件。我是 将麦克风的音轨添加到媒体流 包含( 屏幕的视频轨道 + 系统音频轨道 )。所以最终流包含 2 个音轨,一个是麦克风,另一个是系统音频。 当我将
当我尝试在我的程序中制作摄像机时,出现此错误: E/MediaRecorder﹕ start failed: -19 代码是 try { final SurfaceView sv = (Sur
const [rec, setRec] = useState({}); const [onRec, setOnRec] = useState(true); useEffect(() => {
这段代码在 Debug模式下工作得很好,但当不是 Debug模式时它总是抛出运行时异常。 mMediaRecorder.stop(); 根据 Java 文档: Stops recordin
当我尝试为我的 MediaRecorder 设置视频大小时,我在启动方法中收到 RuntimeException。 mRecorder.setAudioSource(MediaRecorder.Aud
录制音频是一个很长的操作,所以我启动mRecorder?.start()在服务内的协程中,您可以看到 RecordService.kt。 我调用 suspend fun startRecord(){.
使用媒体记录器,我可以在 azure 上上传和附加视频 blob。但是无法使用以下代码在下载时查找组合视频 - var chunks =[]; var mediaRecorder = new Medi
我在我的应用程序中集成了摄像头。当用户单击捕获按钮时,我隐藏了工具栏,以便摄像头预览屏幕尺寸增加。这会导致应用程序在停止在线录制时崩溃 - mMediaRecorder.stop(); 。 java.
我想在按住按钮时使用 MediaRecorder 开始录制语音消息。尝试在 onLongClickListener 中开始录制时出现 IllegalStateException。 如堆栈跟踪中所述,我
我的应用需要录制最长 8 秒的视频。这已经通过 MediaRecorder.setMaxDuration(long milliseconds) 实现。该应用还需要顶部的进度条和带有剩余时间倒计时的标签
使用时 CanvasCaptureMediaStream和 MediaRecorder,有没有办法在每一帧上获取一个事件? 我需要的和 requestAnimationFrame() 没什么不同,但我
我正在尝试使用媒体录音机来录制音频。我让它工作,以便我能够录制和播放。唯一的问题是我无法记录程序第二次崩溃的情况。我有一个单独的方法来重置 MediaRecorder,但无论我将它放在哪里,它都不起作
我正在使用 MediaRecorder 录制视频,但似乎无论我使用什么设置,帧率都令人震惊(~ 1fps) 这是我的代码: recorder.setAudioSource(MediaRecor
如果我使用 MediaRecorder.AudioSource.MIC 声音会正常录制。如果 MediaRecorder.AudioSource.VOICE_DOWNLINK 声音以慢速播放。我需要它
我查看了其他人遇到的这个问题,但没有找到合适的解决方案。像他们一样,我遵循了相机功能教程:http://developer.android.com/guide/topics/media/camera.
我正在准备一个小型 Android 应用程序,用于捕获用户的照片和录音。用户会用他的相机拍照,然后在查看该照片时添加音频评论。 为了捕捉音频,我正在使用 MediaRecorder [因为 andro
我想录制通话语音,但我收到 MediaRecorder:start failed : -2147483648 这是我的通话记录代码块 public void SesKayitBaslat(Str
我的应用程序录制了一个音频 fragment ,并在录制完成后使用 Retrofit2 将 fragment 发送到服务器。服务器接收到文件,但是文件损坏了,我说的损坏是无法播放。我使用以下 URL(
我尝试实现的方法如下所示。 它保存了文件,音频没问题,但视频全是绿色线条。 我做错了什么? camera.unlock(); mediaRecorder = new MediaRecorder();
我首先尝试创建 SurfaceView: SurfaceView sv = new SurfaceView(context); // Get a surface surfaceHolder = sv.
我是一名优秀的程序员,十分优秀!