Mit android-MediaRecorder
Unten ist die Struktur meiner Arbeit code zum aufzeichnen von video und audio:
Fragen:
1) Warum ist die CamcorderProfile
benötigt? setProfile(...)
erscheint, um die Dimensionen zu was auch immer QUALITY_HIGH gibt, aber später habe ich den Dimensionen will ich mit setVideoSize(...)
die überschreibt das. Allerdings, wenn ich entfernen Sie die beiden CamcorderProfile Linien, die app stürzt bei setVideoSize(...)
mit LogCat E/MediaRecorder(19526): setVideoSize called in an invalid state: 2
.
2) Wie kann ich nicht audio aufnehmen? Die Dokumentation besagt, dass, wenn setAudioSource(...)
ist nicht genannt, wird es keine audio-Spur. Wenn ich allerdings entfernen, die app stürzt bei setProfile(...)
mit LogCat E/MediaRecorder(19946): try to set the audio encoder without setting the audio source first
.
3.) Wenn ich entfernen Sie die beiden CamcorderProfile Linien und die setAudioSource(...)
Linie, kracht es wie in 1).
4) ich habe auch versucht, durch hinzufügen der Zeile
recorder.setOutputFormat(OutputFormat.DEFAULT);
statt der CamcorderProfile Linien. Aber jetzt stürzt es bei perpare()
. Wenn setAudioSource(...)
bezeichnet, ist das LogCat ist: E/MediaRecorder(20737): audio source is set, but audio encoder is not set
wenn es nicht heißt das LogCat ist: E/MediaRecorder(20544): video source is set, but video encoder is not set
Ich sah überall im internet, und ich kann nicht finden, ein gutes Beispiel für den richtigen Weg, um das setup der MediaRecorder. Hier es impliziert nach API 8 sollten Sie die CamcorderProfile Klasse, aber es scheint mir, dass es Probleme verursacht.
Jede Hilfe würde groß sein! Danke!
Code (die funktioniert, wenn Sie ausführen, wie es unten ist):
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 ...
InformationsquelleAutor jacobianism | 2013-07-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich nicht viel Erfahrung mit MediaRecorder aber ich Las einige Themen und ich werde versuchen, deine Fragen zu beantworten:
1, 3 und 4) CamcorderProfile setzt mehr als nur die Auflösung, es stellt auch die Dinge, die als Ausgabe-format und Encoder (für video und audio). Sie sind immer die Fehler, weil Sie wahrscheinlich benötigen, um verwenden
setOutputFormat
vor dem AufrufsetVideoSize
und Sie zu rufensetVideoEncoder
undsetAudioEncoder
nach, wenn Sie nicht möchten, zu verwenden CamcorderProfile. [Nach diesem Antwort]2) Wieder, CamcorderProfile setzt auch die audio-Eigenschaften (wie Codec, BitRate, SampleRate,...), so dass Sie benötigen, um eine Audio-Quelle, bevor Sie ihn aufrufen, das ist, warum die app abgestürzt ist. Wenn Sie nicht wollen, um audio aufzuzeichnen versuchen Sie den nächsten code: (habe ich nicht getestet, so dass ich nicht wirklich wissen, ob es funktioniert, aber ich bin ziemlich sicher, dass es funktioniert)
Sich auch bewusst sein, dass, wenn Sie nicht verwenden möchten CamcorderProfile (was bedeutet, dass Sie aufnehmen möchten audio oder nur video), die Sie haben können, um zusätzliche Parameter zu versichern, Sie haben die Qualität, die Sie wollen. Werfen Sie einen Blick auf die folgenden Beispiel-code:
Ich hoffe das hilft dir.
setProfile()
Funktion. Es ruft immersetAudioEncoder()
also, wenn Sie nicht die audio-Quelle wird es Abstürzen. Die Antwort ist, kopieren Sie diese Funktion, so können Sie weiterhin mit dem eingebautenCamcorderProfile
Einstellungen, sondern auch auswählen, welche Einstellungen Sie festlegen möchten (dh audio). DankJa, wenn Sie verwenden möchten, den Camcorder zu Holen, nur video können Sie das auch tun. Dass Sie Weise können Sie die optimale verfügbare Werte für ein Gerät ohne hartcodieren.
Nach viel recherche dein post machte meinen Tag. Setzen setVideoSize vor setVideoEncoder und setAudioEncoder hat den trick. Dank
InformationsquelleAutor Thomas H.