Android 媒体录制器停止异常

3

我正在使用Android媒体录制器同时录制视频和音频...
我正在检查剪辑长度,如果小于2秒,则删除它...
但问题是,如果我从文件路径检查文件的持续时间,每次MediaRecorder抛出异常后都会抛出异常,即使我录制了10秒的音频?
但是当我注释掉检查创建的视频持续时间的代码时,它可以正常工作...
以下是我的代码:

if (prMediaRecorder != null) {
    try {
        prMediaRecorder.stop();
        timer.cancel();
        PathNameArray.add(prRecordedFile.getPath());
        Log.e("No Exception", "File Added and Saved");

        ////////////// Check Length and Delete File
        if (prRecordedFile != null) {
            if (MediaPlayer.create(getApplicationContext(), Uri.fromFile(new File(
                            prRecordedFile.getPath()))).getDuration() <= 2000) {

                File file = new File(prRecordedFile.getPath());
                boolean deleted = file.delete();
                Toast.makeText(getApplicationContext(),
                        "Video Clip Length Too Short, Clip Not Added",
                        Toast.LENGTH_SHORT).show();

                PathNameArray.remove(PathNameArray.size() - 1);
            }
        }

    } catch (RuntimeException e) {
        Toast.makeText(getApplicationContext(),
                "Corrupt Clip, Clip Not Added",
                Toast.LENGTH_SHORT).show();
        File file = new File(prRecordedFile.getPath());
        boolean deleted = file.delete();
        timer.cancel();
        Log.e("Exception Caught", "File Not Added");

    } finally {
        try {
            prCamera.reconnect();
        } catch (IOException e) {

            e.printStackTrace();
        }
    }
}

prMediaRecorder = new MediaRecorder();
MarkerName = null;

请帮我看看,我的代码有问题吗?
1个回答

1
我解决了这个问题,
问题出在我获取媒体播放器的持续时间方式上
我使用了以下代码,问题得到了解决...
//////////////// Check Length and Delete File
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(prRecordedFile.getPath());
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
long timeInmillisec = Long.parseLong(time);

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