使用Media Recorder在Android上分段录制视频

3
我正在实现一个应用程序,它包括根据一定的时间将录制的视频保存到不同的视频文件中的功能。
为了实现这一点,我已经实现了一个自定义相机,并在特定的循环中使用了MediaRecorder.stop()和MediaRecorder.start()。
但是这种方法在重新启动媒体记录器(停止和启动)时会创建卡顿效果。是否有可能使用媒体记录器或任何第三方库无缝停止和开始录制?
非常感谢您的帮助。

我正在使用自定义相机和媒体录制器进行视频录制。 - Salman Khakwani
我看到了,您想在视频录制时将其拆分成多个部分。然而,我认为,如果您录制完整的视频,然后稍后在完整的块上执行拆分操作,会是最简单的方法。或者,如果您的要求需要您坚持在录制时拆分视频,您应该维护一个缓冲区。不要直接从相机向视频录像机馈送流。只需在这两个组件之间引入一个缓冲区即可。 - Parth Kapoor
你的方法听起来很有趣,请详细说明如何维护缓冲区? - Salman Khakwani
请分享你的代码。 - Parth Kapoor
@SalmanKhakwani,我知道已经过了很长时间,但我很想知道你是如何解决这个问题的。你最终使用了MediaCodec吗? - fabricio
2个回答

4
我认为实现数据块记录的最佳解决方案是在MediaRecorder对象中设置最大时间。
mMediaRecorder.setMaxDuration(CHUNK_TIME);

然后您可以附加一个信息侦听器,它将在达到最大块时间时通知您。
mMediaRecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {
  @Override
  public void onInfo(MediaRecorder mr, int what, int extra) {
    if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) {
        // restartVideo()
    }
 }
});

在 restartVideo 中,你需要首先清除之前的 MediaRecorder 对象,然后重新开始录制视频。

从这个回复来看,您似乎可以帮助回答http://stackoverflow.com/questions/32659380/how-to-get-android-video-capture-to-survive-screen-rotation,它是关于将拍摄内容保存到现有文件中的问题。 - Katedral Pillon
3
这将使得视频之间出现一些小间隔。 - fabricio
@fabricio 这是真的,Android 默认情况下在重新启动视频录制时需要大约1-2秒钟的时间。 - Uzair

1
您可以创建两个MediaRecorder实例,它们会略有重叠(即当流接近第一个块的结尾时,您可以准备并启动第二个块)。如果它们仅捕获视频,则可以同时使用2个MediaRecorders记录2个视频文件。不幸的是,在2个MediaRecorder实例之间共享麦克风不受支持。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接