MediaRecorder.стоп () стоп не удалось: -1007

Я записываю видео с помощью MediaRecorder. Мой код прекрасно работает на 2.3.3 но не работает на 4.0.3.

проблема заключается в следующем: код mediaRecorder.stop () выбрасывает RuntimeExeption

java.lang.RuntimeException: stop failed.
    at android.media.MediaRecorder.stop(Native Method)

С сообщением LogCat

04-05 15:10:51.815: E/MediaRecorder(15709): stop failed: -1007

обновление

я обнаружил, что MediaPlayer сообщает об ошибке (через MediaPlayer.OnErrorListener) почти сразу после старта. Код ошибки 100 (медиа-сервер умер), extra -1007.

обновление 2 Код подготовить MediaRecorder

            c = Camera.open();

    ...

    // Step 1: Unlock and set camera to MediaRecorder
    camera.unlock();
    mediaRecorder.setCamera(camera);

    // Step 2: Set sources
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

    // Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
    CamcorderProfile profile = CamcorderProfile
            .get(CamcorderProfile.QUALITY_HIGH);

    // manual set up!

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

    mediaRecorder.setVideoEncodingBitRate(profile.videoBitRate);
    mediaRecorder.setVideoFrameRate(profile.videoFrameRate);
    mediaRecorder.setVideoSize(profile.videoFrameWidth,
            profile.videoFrameHeight);

    mediaRecorder.setAudioChannels(profile.audioChannels);
    mediaRecorder.setAudioEncodingBitRate(profile.audioBitRate);
    mediaRecorder.setAudioSamplingRate(profile.audioSampleRate);

    mediaRecorder.setAudioEncoder(profile.audioCodec);
    //mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
    mediaRecorder.setVideoEncoder(profile.videoCodec);

    // mediaRecorder.setProfile(profile);

    // Step 4: Set output file
    mediaRecorder.setOutputFile("somefile.mp4");

    // Step 5: Set the preview output
    mediaRecorder.setPreviewDisplay(preview.getHolder().getSurface());

    // Step 6: Prepare configured MediaRecorder
    try {
        mediaRecorder.prepare();
    } catch ...
    { release mediaRecorder}

тогда я просто позвоню mediaRecorder.начать() обратите внимание, что мне нужно закодировать видео в формате mp4. Этот код работает на Samsng Galaxy GIO (android 2.3.3) и терпит неудачу, как описано на Acer E305 (android 4.0.2)

какие идеи? Спасибо.

3 ответов


наконец-то решил. Проблема заключалась в настройке размера предварительного просмотра перед установкой фактического предварительного просмотра для камеры. Размер предварительного просмотра должны быть равным выбранному размеру видео.

CamcorderProfile profile = [get required profile];

Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(profile.videoFrameWidth,profile.videoFrameHeight);
mCamera.setParameters(parameters);

mCamera.setPreviewDisplay([surface holder]);
mCamera.startPreview();

...

//configure MediaRecorder and call MediaRecorder.start()

цитирование документации метода "stop" в MediaRecorder.java в 4.0.3:

Остановка записи. Вызов этого после "пуск" (). После остановки записи, вам придется настроить его снова, как если бы он только что был сооруженный. Обратите внимание, что исключение RuntimeException намеренно вызывается применение, если никакие действительные аудио / видео-данные не были получены когда Stop() вызывается. Это происходит, если Stop() вызывается сразу после начать.)( Неудача позволяет применение принять меры в соответствии с очистите выходной файл (например, удалите выходной файл), так как когда это происходит, выходной файл не создается должным образом.

и тот факт, что MediaPlayer сообщает об этом, "медиа-сервер умер" по той же причине. Можете ли вы опубликовать остальную часть кода, чтобы узнать, есть ли какое-либо неправильное представление, которое может вызвать эту проблему?


поэтому я обнаружил, что эта ошибка сообщается для меня на эмуляторе Android для API 18 (после записи отлично работает на более поздних версиях).

Я обнаружил, что если бы я позвонил Camera.startPreview() перед инициализацией и началом запуска my MediaRecorder экземпляр, я бы получил stop failed: -1007 журнал при вызове MediaRecorder.stop, но если я позвоню Camera.stopPreview() перед инициализацией my MediaRecorder видео будет записывать нормально.

надеюсь, это поможет