Android MediaRecorder – "start failed: -19"

Ich versuche, einen Videorecorder auf Android zu erstellen, und ich habe meinen Code vorbereitet, der funktionieren soll – aber ich bekomme ständig eine Fehlermeldung start failed: -19 .

Hier ist mein Code:

  • Wie ändere ich den Gerätenamen in WiFi direkt p2p?
  • Wie eröffne ich ein Android Studio Projekt in Eclipse?
  • Android - Benutzerdefinierte Rating-Bar sieht aus wie seine Blutung
  • Native Haken in Android Client
  • Wie man ein Hinzufügen einer Ansicht in Android animiert?
  • Google spielen, ich versehentlich hochgeladen Produktion APK, jetzt kann nicht Beta-Tests
  •  public boolean startRecording() { try { camera.unlock(); mediaRecorder = new MediaRecorder(); mediaRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() { @Override public void onError(MediaRecorder mr, int what, int extra) { Log.i(TAG, "Error"); } }); mediaRecorder.setCamera(camera); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); Log.i(TAG, "a"); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); Log.i(TAG, "b"); mediaRecorder.setMaxDuration(maxDurationInMs); // set to 20000 String uniqueOutFile = OUTPUT_FILE + System.currentTimeMillis() + ".3gp"; File outFile = new File(uniqueOutFile); if (outFile.exists()) { outFile.delete(); } mediaRecorder.setOutputFile(uniqueOutFile); mediaRecorder.setVideoFrameRate(videoFramesPerSecond); // set to 20 mediaRecorder.setVideoSize(sView.getWidth(), sView.getHeight()); Log.i(TAG, "c"); mediaRecorder.setPreviewDisplay(holder.getSurface()); mediaRecorder.setMaxFileSize(maxFileSizeInBytes); // set to 50000 mediaRecorder.prepare(); Log.i(TAG, "d"); mediaRecorder.start(); Log.i(TAG, "e"); return true; } catch (IllegalStateException e) { Log.i(TAG, "f"); Log.e(TAG, e.getMessage()); e.printStackTrace(); camera.lock(); return false; } catch (IOException e) { Log.i(TAG, "g"); Log.e(TAG, e.getMessage()); e.printStackTrace(); camera.lock(); return false; } catch (RuntimeException e) { Log.i(TAG, "h"); Log.e(TAG, e.getMessage()); camera.lock(); return false; } } 

    Alle Debug-Logs (von "a" bis "d") werden in log gedruckt, also scheint es, dass alle Schritte bis zu mediaRecorder.prepare() richtig gemacht sind. Dann fängt es eine RuntimeException mit Meldungsstart start failed: -19 . Es gibt eine ähnliche Frage , aber das löst mein Problem nicht.

    Gibt es einen anderen Grund, einen solchen Fehler zu bekommen?

  • Ich benutze die Listview Add / Remove Footer für Listview Cross App in Android Version 4.3?
  • Was ist die schnellste FFT Bibliothek für iOS / Android ARM Geräte?
  • Android M + Retrofit + JSON: Kann nicht Feldbauer zugänglich machen
  • Android Log Levels
  • Ausrichten von 2 Texten, 1 normal, 1 Gegenteil
  • Verwenden einer benutzerdefinierten Schrift in Android
  • 4 Solutions collect form web for “Android MediaRecorder – "start failed: -19"”

    Ich habe gerade den Fehler in dieser Zeile herausgefunden:

     mediaRecorder.setVideoSize(sView.getWidth(), sView.getHeight()); 

    Nach der kommentierung dieser linie läuft der code perfekt!

    Ich habe mein Problem gelöst, sobald ich das für Videoaufnahmen hinzugefügt habe

     /** * Start video recording by cleaning the old camera preview */ private void startVideoRecorder() { // THIS IS NEEDED BECAUSE THE GLASS CURRENTLY THROWS AN ERROR OF // "MediaRecorder start failed: -19" // THIS WONT BE NEEDED INCASE OF PHONE AND TABLET // This causes crash in glass kitkat version so remove it // try { // mCamera.setPreviewDisplay(null); // } catch (java.io.IOException ioe) { // Log.d(TAG, // "IOException nullifying preview display: " // + ioe.getMessage()); // } // mCamera.stopPreview(); // mCamera.unlock(); recorder = new MediaRecorder(); // Let's initRecorder so we can record again initRecorder(); } /** * Initialize video recorder to record video */ private void initRecorder() { try { File dir = new File(folderPath); if (!dir.exists()) { dir.mkdirs(); } mCamera.stopPreview(); mCamera.unlock(); videofile = new File(dir, fileName + ".mp4"); recorder.setCamera(mCamera); // Step 2: Set sources recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // Step 3: Set a CamcorderProfile (requires API Level 8 or higher) recorder.setProfile(CamcorderProfile .get(CamcorderProfile.QUALITY_HIGH)); // Step 4: Set output file recorder.setOutputFile(videofile.getAbsolutePath()); // Step 5: Set the preview output recorder.setPreviewDisplay(mPreview.getHolder().getSurface()); // Step 6: Prepare configured MediaRecorder recorder.setMaxDuration(video_duration * 1000); recorder.setOnInfoListener(new OnInfoListener() { @Override public void onInfo(MediaRecorder mr, int what, int extra) { if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) { mCamera.stopPreview(); releaseMediaRecorder(); /* * initiate media scan and put the new things into the * path array to make the scanner aware of the location * and the files you want to see */MediaScannerConnection.scanFile( CuxtomCamActivity.this, new String[] { videofile.getPath() }, null, null); Intent intent = new Intent(); intent.putExtra(CuxtomIntent.FILE_PATH, videofile.getPath()); intent.putExtra(CuxtomIntent.FILE_TYPE, FILE_TYPE.VIDEO); setResult(RESULT_OK, intent); finish(); } } }); recorder.prepare(); recorder.start(); } catch (Exception e) { Log.e("Error Stating CuXtom Camera", e.getMessage()); } } private void releaseMediaRecorder() { if (recorder != null) { recorder.reset(); // clear recorder configuration recorder.release(); // release the recorder object recorder = null; } } 

    Detaillierte Anleitung finden Sie in dieser Open Source Cuxtom Cam

    Das Problem ist in Ihrem setVideoSize() Code.

    Und warum dieser Code Fehler …

    Von der Forschung habe ich getan, Fehlercode -19 kommt, wenn es ein Problem mit der Größe des Videos wie von MediaRecorder#setVideoSize()

    Führen Sie diesen Code aus und sehen Sie den Bildschirm, den Ihre Kamera in Ihrem Gerät unterstützen kann:

     final List<Camera.Size> mSupportedVideoSizes = getSupportedVideoSizes(mCamera); for (Camera.Size str : mSupportedVideoSizes) Log.e(TAG, "mSupportedVideoSizes "+str.width + ":" + str.height + " ... " + ((float) str.width / str.height)); 

    Und Methode ist:

     public List<Size> getSupportedVideoSizes(Camera camera) { if (camera.getParameters().getSupportedVideoSizes() != null) { return camera.getParameters().getSupportedVideoSizes(); } else { // Video sizes may be null, which indicates that all the supported // preview sizes are supported for video recording. return camera.getParameters().getSupportedPreviewSizes(); } } 

    Ich hatte dieses Problem mit einigen bestimmten Handys, ich habe herausgefunden, dass ich keine Camcoder-Profilgrößen in einigen von ihnen setzen konnte. Aber als das für die problematischen Androiden arbeitete, hörte es auf, an den vorherigen Arbeitsgeräten zu arbeiten.

    Also am Ende war meine implementierte Logik so etwas wie:

    • Breite / Höhe einstellen
    • Versuchen Sie, den Merdia Recorder zu starten
    • Im Falle einer Ausnahme versuchen Sie es erneut, ohne die Breite / Höhe einzustellen

    Art von Müll Logik, aber das funktionierte.

    Ich habe ein Github-Projekt mit dieser Implementierung eingerichtet, probier es aus: https://github.com/rafaelsilverio/MediaRecorder

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.