我希望在视频录制时每隔5秒保存一次视频。
我尝试了很多解决方案,但是我遇到了一个“故障”,就是最后保存的帧在预览中会停留约300毫秒。
我认为原因在于MediaRecorder类的“一旦录制器被停止,它就需要完全重新配置和准备才能重新启动”。
谢谢。
我尝试了很多解决方案,但是我遇到了一个“故障”,就是最后保存的帧在预览中会停留约300毫秒。
我认为原因在于MediaRecorder类的“一旦录制器被停止,它就需要完全重新配置和准备才能重新启动”。
谢谢。
MediaRecorder
实现这一点是不可能的。更好的方法可能是通过使用MediaCodec对视频进行编码,然后使用MediaMuxer存储已编码内容。 MediaCodec
和MediaMuxer
类的良好示例。Grafika
项目,并做了一些修改以支持连续分段录制。您可以在这里找到它。运行应用程序后,从列表中选择Show + capture camera
选项,然后将Output Segment Duration
设置为5,然后按Start recording
按钮。"我认为原因在于MediaRecorder类中,"一旦录制器停止,它需要在重新启动之前进行完全的重新配置和准备"
。"
您可以使用多个mediaMuxer
来编码单独的文件。
相机应该发送数据以填充一个MediaMuxer对象(它本身会生成一个.mp4
文件)。
当需要时,您可以开始将相机数据写入第二个(不同的)MediaMuxer,从而自动创建第二个新的.mp4
文件(在使用复用器时开始)。
第一个MediaMuxer然后可以关闭并保存其文件。你的第一部分已经准备好了...
如果需要,可以尝试学习此代码作为使用Camera
与mediaMuxer
的指南:
https://bigflake.com/mediacodec/CameraToMpegTest.java.txt
所以你有一个处理5秒间隔已过的函数?在那个函数中,可以在两个复用器之间循环记录,给其中一个关闭文件的机会,而另一个记录下一个片段,然后反之亦然。
与以下类似的东西不同(使用MediaRecorder.OutputFormat.MPEG_4
):
this.mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
MUXER_OUTPUT_MPEG_4
)://# create a new File to ssave into
File outputFile = new File(OUTPUT_FILENAME_DIR, "/yourFolder/Segment" + "-" + mySegmentNum + ".mp4");
String outputPath = outputFile.toString();
int format = MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4;
try { mMuxer = new MediaMuxer(outputPath, format); }
catch (IOException e) { Log.e(TAG, e.getLocalizedMessage()); }
你可以使用以下命令停止复用器:
mMuxer1.stop(); mMuxer1.release();
提示:
另一种选择是使用线程来运行多个MediaRecorder。这可能有助于您的情况。
请参阅Android 后台进程指南。