MediaRecorder.stop () échec de stop: -1007

j'enregistre une vidéo avec MediaRecorder. Mon code fonctionne très bien sur 2.3.3 mais ne fonctionne pas sur 4.0.3.

le problème est le suivant: le code mediaRecorder.stop () lance la RuntimeExeption

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

avec LogCat message

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

UPDATE

J'ai trouvé que MediaPlayer signale une erreur (via MediaPlayer.OnErrorListener) presque immédiatement après le départ. Le code d'erreur est 100 (serveur de médias est mort), extra -1007.

mise à jour 2 Code de préparez le 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}

puis-je simplyCall mediaRecorder.commencer() veuillez noter que j'ai besoin que la vidéo soit encodée en format mp4. Ce code fonctionne sur Samsng Galaxy GIO (android 2.3.3) et échoue comme décrit sur Acer E305 (android 4.0.2)

des idées? Grâce.

27
demandé sur Alex 2013-04-05 16:14:08

3 réponses

Résolu à la dernière. Le problème était de définir la taille de prévisualisation avant de définir la prévisualisation réelle de la caméra. La taille de l'aperçu être égale à la vidéo sélectionnée de la taille.

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()
22
répondu Alex 2013-05-14 12:28:53

citant la documentation de la méthode "stop" dans MediaRecorder.java en 4.0.3:

Arrête l'enregistrement. Appel cet après start(). Une fois l'enregistrement arrêté, vous devrez le configurer à nouveau comme si elle a été construit. Notez qu'une RuntimeException est lancée intentionnellement vers la demande, si aucune donnée audio / vidéo valide n'a été reçue stop() est appelée. Cela se produit si stop () est appelé immédiatement après commencer.)( L'échec laisse l'application prendre des mesures en conséquence pour nettoyer le fichier de sortie (supprimer le fichier de sortie, par exemple), depuis le fichier de sortie n'est pas construit correctement lorsque cela se produit.

et le fait que MediaPlayer rapporte cette "mort du serveur média" est dû à la même raison. Pouvez-vous afficher le reste de votre code pour voir s'il y a une idée fausse qui pourrait causer ce problème?

15
répondu Jose L Ugia 2013-04-13 10:02:58

alors j'ai trouvé cette erreur signalée pour moi sur L'émulateur Android pour API 18 (après l'enregistrement fonctionnait très bien sur les versions suivantes).

Ce que j'ai trouvé est que si j'avais appelé Camera.startPreview() avant d'initialiser et de commencer à lancer mon MediaRecorder exemple, j'aurais l' stop failed: -1007 journal lors de l'appel de MediaRecorder.stop, mais si j'ai appelé Camera.stopPreview() avant d'initialiser mon MediaRecorder La vidéo enregistrerait très bien.

j'espère que cela aide

0
répondu kassim 2016-10-22 02:27:38