使用Android的mediaRecorder的文件大小限制?

时间:2018-07-16 14:43:46

标签: android android-camera android-camera2 android-mediarecorder

我使用android的Media Recorder制作了自定义摄像机。 我面临的问题是,当文件大小达到3.80 GB时,它将停止记录。

  • 我知道这不是文件系统问题,因为我的sdcard具有ntfs(我的 手机支持-荣耀6X)
  • 我的SD卡上有足够的空间。
  • 我什至没有使用MediaRecorder.setMaxFileSize()。
  • 手机中内置的摄像头应用程序可以轻松拍摄超过3.80 GB的视频。

那么这里到底是什么问题? 我知道在某些android设备中,相机应用程序具有嵌入式文件大小限制,与文件系统无关。 但这对制作自定义视频录制应用程序来说应该不是问题吗?

编辑:在下面发布解决方案。

2 个答案:

答案 0 :(得分:2)

好的,我找到了解决方案, 问题是我没有使用MediaRecorder.setMaxFileSize(),因此默认情况下限制设置为4GB。 即使使用MediaRecorder.setMaxFileSize(-ve或0)显然会根据其参考页禁用文件大小限制,但仍在内部将文件大小限制设置为4GB(如果有人对此有更多信息,请共享)。 解决方案是,我使用StatFS找到了内部存储中的可用空间,并将其设置为setMaxFileSize()的参数,这很好地工作了。我终于能够突破4GB的文件限制。 此功能适用于支持文件大小大于4GB的所有文件系统。

答案 1 :(得分:1)

我们可以设置.setMaxFileSize,然后对.setNextOutputFile()对象上的.setOnInfoListener()使用MediaRecorder方法(在Android O中添加,API级别26

示例代码:

MediaRecorder recorder = new MediaRecorder();
recorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
String recordFilePath = "/mnt/sdcard/video_124.mp4";
recorder.setOutputFile(recordFilePath);
recorder.setVideoEncodingBitRate(10_00_000);
recorder.setVideoFrameRate(18);
recorder.setVideoSize(720,1280);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

// imp      
recorder.setMaxFileSize(100000000); // 10000000  = 10 mb | 100000000 = 100 mb
recorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {
            @Override
            public void onInfo(MediaRecorder mr, int what, int extra) {
                Log.i(TAG,String.format(Locale.US,"onInfoListen what : %d | extra %d", what, extra));

            if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING) {
                try {
                    recorder.setNextOutputFile((new RandomAccessFile("/mnt/sdcard/video_125.mp4"),"rw").getFD()));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            }
        });

recorder.prepare();
recorder.start();

这里有完整的gist version可用。