Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 录制时如何在MediaRecorder中设置MIME_类型?_Android - Fatal编程技术网

Android 录制时如何在MediaRecorder中设置MIME_类型?

Android 录制时如何在MediaRecorder中设置MIME_类型?,android,Android,我想录制视频并将MIME_类型设置为video/mp4 我尝试使用错误代码设置MIME_类型。但我得到了一个非法的例外。所以我想问两个问题: 使用MediaRecorder重新编码时如何设置MIME_类型? 为什么我会有例外? 您可以在保存录制的文件时设置MIME类型,如下所示,共享一些代码- public class Main extends Activity { private MediaRecorder mediaRecorder; private File file =

我想录制视频并将MIME_类型设置为video/mp4

我尝试使用错误代码设置MIME_类型。但我得到了一个非法的例外。所以我想问两个问题:

使用MediaRecorder重新编码时如何设置MIME_类型? 为什么我会有例外?
您可以在保存录制的文件时设置MIME类型,如下所示,共享一些代码-

public class Main extends Activity {
    private MediaRecorder mediaRecorder;
    private File file = null;
    static final String PREFIX = "record";
    static final String EXTENSION = ".3gpp";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mediaRecorder = new MediaRecorder();

        Button startRecording = (Button) findViewById(R.id.startBtn);
        Button stopRecording = (Button) findViewById(R.id.stopBtn);
        startRecording.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                try {
                    startRecording();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        stopRecording.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                stopRecording();
                saveToDB();
            }
        });
    }

    /**
     * This method starts recording process
     * @throws Exception
     */
    private void startRecording() throws Exception {
        mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        if (file == null) {
            File rootDir = Environment.getExternalStorageDirectory();
            file = File.createTempFile(PREFIX, EXTENSION, rootDir);
        }
        mediaRecorder.setOutputFile(file.getAbsolutePath());
        mediaRecorder.prepare();
        mediaRecorder.start();
    }

    /**
     * This method stops recording
     */
    private void stopRecording() {
        mediaRecorder.stop();
        mediaRecorder.release();
    }

    /**
     * This method sets all metadata for audio file
     */
    private void saveToDB() {
        ContentValues values = new ContentValues(3);
        long current = System.currentTimeMillis();
        values.put(MediaColumns.TITLE, "My Audio record");
        values.put(MediaColumns.DATE_ADDED, (int) (current / 1000));
        values.put(MediaColumns.MIME_TYPE, "audio/mp3");
        values.put(MediaColumns.DATA, file.getAbsolutePath());
        ContentResolver contentResolver = getContentResolver();
        Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        Uri newUri = contentResolver.insert(base, values);
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri));
    }
}
希望这有助于:

public class Main extends Activity {
    private MediaRecorder mediaRecorder;
    private File file = null;
    static final String PREFIX = "record";
    static final String EXTENSION = ".3gpp";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mediaRecorder = new MediaRecorder();

        Button startRecording = (Button) findViewById(R.id.startBtn);
        Button stopRecording = (Button) findViewById(R.id.stopBtn);
        startRecording.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                try {
                    startRecording();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

        stopRecording.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                stopRecording();
                saveToDB();
            }
        });
    }

    /**
     * This method starts recording process
     * @throws Exception
     */
    private void startRecording() throws Exception {
        mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        if (file == null) {
            File rootDir = Environment.getExternalStorageDirectory();
            file = File.createTempFile(PREFIX, EXTENSION, rootDir);
        }
        mediaRecorder.setOutputFile(file.getAbsolutePath());
        mediaRecorder.prepare();
        mediaRecorder.start();
    }

    /**
     * This method stops recording
     */
    private void stopRecording() {
        mediaRecorder.stop();
        mediaRecorder.release();
    }

    /**
     * This method sets all metadata for audio file
     */
    private void saveToDB() {
        ContentValues values = new ContentValues(3);
        long current = System.currentTimeMillis();
        values.put(MediaColumns.TITLE, "My Audio record");
        values.put(MediaColumns.DATE_ADDED, (int) (current / 1000));
        values.put(MediaColumns.MIME_TYPE, "audio/mp3");
        values.put(MediaColumns.DATA, file.getAbsolutePath());
        ContentResolver contentResolver = getContentResolver();
        Uri base = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        Uri newUri = contentResolver.insert(base, values);
        sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, newUri));
    }
}