Запись звука Android работает, но запись видео нет? - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть один вопрос,

Когда я использую запись aurio в моей программе, она работает нормально, но когда я пытаюсь записать видео, мой файл .3gp пуст (0 байт).

Подскажите, пожалуйста, почему?

Вот часть моего кода для видеозаписи, которая не работает:

protected void startRecording() throws IOException 
{
    mrec = new MediaRecorder();  // Works well
    mrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mrec.setAudioSource(MediaRecorder.AudioSource.MIC); //Works well
    mrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); //Works well with OutputFormat.THREE.GPP
    mrec.setVideoSize(100, 100);
    mrec.setVideoFrameRate(5);
    mrec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // Works well
    mrec.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
    mrec.setOutputFile("/sdcard/test5.3gp");  //Works well with test5.mp4

    mrec.prepare(); // Works well for the audio recording
    mrec.start(); // Works well for the audio recording
}

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Запись видео получается не так просто.

Сначала вам нужно разблокировать ручку на объекте камеры, а затем установить камеру на рекордер.

mCameraDev.unlock();
mRecorder.setCamera(mCameraDev);

Примечание: вам нужно будет позвонить на setCamera сразу после вызова unlock и перед вызовом любого другого API рекордера, иначе вы получите исключение из недопустимого состояния.

Далее вам потребуется настроить поверхность предварительного просмотра с помощью рекордера. По сути, это действует как видеовход на записывающее устройство, т. Е. Любые видеоданные на поверхности предварительного просмотра, которые принимаются в качестве входных данных для видеозаписи.

mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());

Если вам нужна помощь по настройке предварительного просмотра на камере, проверьте эту ссылку .

Вместо индивидуальной настройки форматов используйте API-интерфейсы getProfile и setProfile на перекодировщике.

И последнее: разрешение видео, установленное для рекордера, должно быть синхронизировано с разрешением поверхности предварительного просмотра. Если поверхность предварительного просмотра VGA, убедитесь, что вы выполняете запись с разрешением VGA.

0 голосов
/ 27 декабря 2011

Похоже, что для кодирования (записи) видео поддерживается только кодек H.263: http://developer.android.com/guide/appendix/media-formats.html

...