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.
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()
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?
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