当前位置: 首页 > 知识库问答 >
问题:

如何使用media recorder设置最大持续时间记录、释放文件并自动开始录制

丰景同
2023-03-14

我的应用程序有一个功能,使用通过服务(IntentService)启动的媒体记录器录制音频,以便在后台录制。

由于某些设备和API限制,我需要对文件实施限制,以便在达到配置的限制后,生成文件并再次开始录制。

例如,到达1分钟后,必须停止录制,生成文件,并开始另一次录制,直到服务停止。

我尝试使用SetOnInfo Listener,但从未调用此事件,当我将maxDuration定义为1分钟时,在此持续时间之后,logcat将显示此消息并停止音频录制:

Handler(android.media.MediaRecorder$EventHandler){ee2b629}向死线程java上的处理程序发送消息。lang.IllegalStateException:Handler(android.media.MediaRecorder$EventHandler){ee2b629}正在向android上死线程上的处理程序发送消息。操作系统。消息队列。Android上的排队消息(MessageQueue.java:545)。操作系统。处理程序。android上的排队消息(Handler.java:661)。操作系统。处理程序。android上的sendMessageAtTime(Handler.java:630)。操作系统。处理程序。android上的sendMessageDelayed(Handler.java:600)。操作系统。处理程序。android上的sendMessage(Handler.java:537)。媒体媒体录像机。postEventFromNative(MediaRecorder.java:1709)

        mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mediaRecorder.setOutputFile(file.getPath());
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mediaRecorder.setMaxDuration(60000); 
        mediaRecorder.prepare();
        mediaRecorder.start();

        mediaRecorder.setOnInfoListener((mr, what, extra) -> {
            if(what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED){
               //Do somethings
            }
        });

共有1个答案

颛孙航
2023-03-14

启动一个定时器,它将在给定的时间后触发,假设您希望录音最大为20分钟,然后在调用media aRecorder.start()时启动定时器,并将在20分钟后触发,然后调用停止()和释放()那里的方法。你甚至可以取消如果你觉得录音已经完成

 类似资料:
  • 问题内容: 我正在尝试在来电中暂停录音并在以后恢复录音。我正在使用andriod 并尝试在中录制。我尝试通过重设/停止录音来暂停/恢复,并以开头,是已停止/暂停的音频文件的,希望它可以追加,但是我没有运气。有没有办法实现这一目标或追加两张录音,或者我应该放弃。 码: 停止录制,但恢复失败并显示消息。 问题答案: 您问题的简单答案是: 您不能吗? 因此,在Stop停止后,尝试保存对SDCard的呼叫

  • 我正在尝试创建一个蛇游戏,我使用箭头键或WASD移动蛇。最初,蛇的速度很慢,并且以每秒2帧的速度移动(就像经典的蛇游戏),我希望当我按住其中一个键时,蛇的移动速度更快,当我松开它时,将其设置为原始速度。 我试着在按下ON键的情况下改变移动速度: 然后在我发布时将其更改为正常速率: *运动是一条时间线,从游戏开始到蛇停止或死亡。 代码按我的预期工作,但每次我按下一个键时,它都会加速一个周期,然后变慢

  • 我有一个按小时对记录进行分组的查询,如下所示: 这将记录分为一个小时窗口,每个小时窗口从第0分钟开始。 这个需求的一点背景:我有一个自动测试,它会导致数据库被填充。在我的测试开始之前,数据库可能已经有了一些记录。我的自动测试的目标是每小时完成一定数量的任务。我正在寻找一种方法来验证我的测试的准确性,方法是在DB中为每小时生成一个报告,其中每小时从匹配条件的第一条记录的时间戳(分钟)开始(我可以定义

  • 问题内容: 我想通过请求中的项目填充日志记录上下文,例如:。我以为我可以在中间件的处理程序中覆盖Log类型。虽然它似乎不起作用,但我不确定为什么! 您能看到为什么在同一请求中对IIUC应该没有影响吗? 问题答案: 您需要对记录程序进行请求范围的检查。每当有新的连接进入时,就为整个处理程序全局设置它,这意味着您要进行数据争用以及通常不受欢迎的行为。 对于请求范围的上下文,请求中的嵌入是完美的。您可以

  • 问题内容: 我有一个愚蠢的Java日志记录问题:我正在从我的应用程序配置文件中加载日志记录配置- 但在读取文件后,它只是不记录任何内容(这看起来很像您在网上可以找到的示例,除了其他应用程序配置- 删除此设置也无济于事。“正在初始化…”日志行似乎很好,但是“启动应用程序”和任何其他消息既未记录到控制台,也从未创建过日志文件。我在这里想念什么? 记录器代码如下所示: 这是配置文件: 问题答案: 好吧,

  • 问题内容: 我为登录配置使用和触发策略。日志文件的翻转设置为每天进行,如果日志文件大小超出限制,也会触发翻转。 如果我每天都将setMaxHistory(10)设置为on ,则它将存档最近10天内的所有日志文件。但是我想要的是每天在SizeAndTimeBasedFNATP上设置maxHIstory。 使用logback可以做到吗? 问题答案: 将SizeAndTimeBasedFNATP和Max