如何修改 MediaRecorder 源以允许 pause/resume 录制

How can I modify the MediaRecorder source to allow pause/resume recording

是否可以修改 MediaRecorder 源以允许 pause/resume 录制?我认为修改此 class 是不可能的,但最近有人告诉我可以。我的问题是,为什么我要修改 MediaRecorder class 而不是扩展它然后编写额外的逻辑?我要为 pausing/resuming 记录添加的基本逻辑是这样的,

public void pauseRecording() 
{ 
  media_recorder.stop();
  media_recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
  media_recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
  media_recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  FileOutputStream paused_file = new FileOutputStream(file_path);
  media_recorder.setOutputFile(paused_file.getFD());
} 

public void resumeRecording() 
{ 
  media_recorder.prepare();
  media_recorder.start();
} 

这个问题是预览闪烁。所以我基本上有三个问题。可以直接修改源码吗?我扩展 MediaRecorder 的方法有什么问题吗?我如何更新我的 pause/resume 以使预览不闪烁?提前致谢。

  1. 你可以修改源,问题是你不能将框架源编译成你的apk并在运行时替换框架。所以不要这样做。
  2. 你是用一个文件记录每一个片段吗?您需要将每一块记录到单独的文件中,否则 "preview flicker" 会发生。
  3. 如果你想把所有的片段都联系到一个文件中,你需要以PCM格式记录(或者你需要自己处理文件头)并确保扬声器在每个片段之前和之后都添加静音。