Ich codiere Camera
Vorschaudaten mit MediaCodec
mit Mime-Typ "video / avc" und übergebe die codierten Daten (nur Video, kein Audio) an MediaMuxer
. Der Muxer scheint gut zu laufen und erstellt eine Ausgabedatei von einiger Größe (d. H. Wird größer, je länger ich aufnehme). Wenn ich jedoch versuche, den Muxer zu stoppen, bekomme ich den Fehler "Fehler beim Beenden des Muxers":
Es gibt einige verdächtige MPEG4Writer-Protokollnachrichten vor dem fehlgeschlagenen Stopp:
%Vor%Irgendwelche Hinweise, was das verursacht? Nicht sicher, welche weiteren Informationen du brauchst.
Klingt so, als hätten Sie MediaMuxer#addTrack()
nicht mit einem MediaFormat
aufgerufen, das die CSD enthielt. Ein Beispiel dafür finden Sie in Code EncodeAndMuxTest.java .
Schauen Sie sich die MPEG4Writer-Implementierung an verwendet von MediaMuxer
, gibt es ein isTrackMalformed()
check in Zeile 2360; Er setzt ERROR_MALFORMED
, wenn die CSD-Daten nicht vorhanden sind, aber nicht sofort zurückgegeben werden. Nichts löscht den Fehler, also macht es eine Menge Arbeit und scheitert dann, was mit dem übereinzustimmen scheint, was Sie sehen.
Ich hatte das gleiche Problem. Während des Schließens des Muxers wurde "Fehler beim Stoppen" angezeigt. Beim Überprüfen meiner gespeicherten Datei in einem ISO-Viewer konnte ich den Track nicht finden. Ich habe das Problem gelöst, indem ich die Spur erst nach der ersten Ausgabe des Video-Encoders erstellt habe. Hier ist, wie ich meine Spur hinzufüge
%Vor%Das Medienformat für die Spur wird von abgerufen mediaCodec.getOutputFormat () die wiederum erst nach der Codierung des ersten Frames initialisiert werden. Ich habe meinen Code geändert, um die Spur nach dem ersten codierten Daten (Und natürlich nur einmal) hinzuzufügen. Es funktioniert gut.
Tags und Links android mp4 mediacodec muxer