Ich arbeite an einer Implementierung eines der Android Test Cases in Bezug auf previewTexture Aufnahme mit den neuen MediaCodec und MediaMuxer APIs von Android 4.3.Muxing Kamera Vorschau h264 encoded Elementary Stream mit MediaMuxer
Ich habe es geschafft, den Vorschau-Stream mit einer Bildrate von ca. 30fps aufzunehmen, indem ich den Aufnahme-Hint auf die Kamera-Parameter setze.
Ich stieß jedoch auf ein Verzögerung/Verzögerung Problem und weiß nicht wirklich, wie man das behebt. Bei der Aufnahme der Kamera-Vorschau mit ganz normalen Qualitätseinstellungen (1280x720, Bitrate von ~ 8.000.000) kommt es bei der Vorschau und dem codierten Material zu gelegentlichen Verzögerungen. Um genauer zu sein: Diese Verzögerung tritt etwa alle 2-3 Sekunden auf und dauert etwa 300-600 ms.
Durch Verfolgen der Verzögerung ich in der Lage war die Verzögerung kommt in der „drainEncoder“ Methode aus der folgenden Codezeile, um herauszufinden:
mMuxer.writeSampleData(mTrackIndex, encodedData, mBufferInfo);
Diese Zeile in einer Schleife aufgerufen wird, wenn der Geber für das Datum verfügbar zum Muxen. Derzeit nehme ich kein Audio auf, daher werden nur die h264-Streams vom MediaMuxer in ein mp4-Format konvertiert.
Ich weiß nicht, ob dies etwas mit dieser Verzögerung zu tun hat, aber es tritt immer auf, wenn die Schleife zwei Iterationen benötigt, um alle verfügbaren Daten des Encoders zu entfernen (um noch spezifischer zu sein, tritt es immer in der ersten auf) diese zwei Iterationen). In den meisten Fällen genügt eine Iteration, um den Encoder zu entfernen.
Da es nicht viele Informationen online über diese neuen APIs gibt, wird jede Hilfe sehr geschätzt!
Vielen Dank für Ihre Antwort: - Die Verzögerungen auftreten tatsächlich alle 5 Sekunden in der Tat. Aber die Frequenz ändert sich nicht, wenn ich das I-Frame-Intervall ändere. Die beste Vermutung ist, dass das benutzerdefinierte I-Frame-Intervall von meinem Encoder (Nexus 4) ignoriert wird? - Ich habe gestern bereits versucht, das Muxing in einem separaten Thread zu trennen und das scheint zu funktionieren ... also werde ich diesen Weg gehen, danke für die Bestätigung! - Ich werde die Verzögerung systrace, sobald ich genug Zeit habe – mAx