Verwenden von Android MediaRecorder

Unten ist die Struktur meines Arbeitscodes zum Aufzeichnen von Video und Audio:

Fragen: 1) Warum ist das?CamcorderProfile erforderlich?setProfile(...) wird angezeigt, um die Dimensionen auf das zu setzen, was QUALITY_HIGH angibt, aber später stelle ich die gewünschten Dimensionen einsetVideoSize(...), was dies außer Kraft setzt. Wenn ich jedoch die beiden CamcorderProfile-Zeilen entferne, stürzt die App absetVideoSize(...) mit LogCatE/MediaRecorder(19526): setVideoSize called in an invalid state: 2.

2) Wie kann ich kein Audio aufnehmen? Die Dokumentation besagt, dass wennsetAudioSource(...) wird nicht gerufen, es wird keine Tonspur geben. Wenn ich diese Zeile entferne, stürzt die App jedoch absetProfile(...) mit LogCatE/MediaRecorder(19946): try to set the audio encoder without setting the audio source first.

3) Wenn ich beide CamcorderProfile-Leitungen und dassetAudioSource(...) Linie, stürzt es ab wie in 1).

4) Ich habe auch versucht, die Zeile hinzuzufügen

recorder.setOutputFormat(OutputFormat.DEFAULT);

anstelle der CamcorderProfile-Zeilen. Aber jetzt stürzt es abperpare(). ObsetAudioSource(...) heißt das LogCat ist:E/MediaRecorder(20737): audio source is set, but audio encoder is not set Wenn es nicht heißt, ist das LogCat:E/MediaRecorder(20544): video source is set, but video encoder is not set

Ich habe im Internet nachgesehen und kann kein gutes Beispiel für die korrekte Einrichtung des MediaRecorders finden.Hier Es impliziert, dass Sie nach API 8 die CamcorderProfile-Klasse verwenden sollten, aber es scheint mir, dass es Probleme verursacht.

Jede Hilfe wäre toll! Vielen Dank!

Code (der funktioniert, wenn er wie unten ausgeführt wird):

recorder = new MediaRecorder();
recorder.setCamera(<<camera>>);
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);

CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
recorder.setProfile(profile);

recorder.setOutputFile(<<Path String>>);
recorder.setVideoSize(<<Width>>, <<Height>>);

recorder.setPreviewDisplay(<<Surface>>);

recorder.setOrientationHint(0); 
recorder.setMaxDuration(10000);
recorder.setOnInfoListener(this);

try
{
    recorder.prepare();
    recorder.start();
} catch ...

Antworten auf die Frage(1)

Ihre Antwort auf die Frage