In-App-Bildschirmaufnahme auf Android, um 15 Bilder pro Sekunde aufzunehmen

8

Nach vielen Recherchen und Tagen mit Experimenten habe ich keine einfache Lösung gefunden.

Ich entwickle eine App, die Benutzer mit einem Haustier auf dem Bildschirm interagieren und ich möchte ihn als Video speichern lassen.

Gibt es eine "einfache" Möglichkeit, den Bildschirm der App selbst zu erfassen?

Ich habe einen Workaround gefunden (um jede Sekunde Bitmaps zu speichern und dann an einen Encoder zu übergeben), aber es scheint zu schwer. Ich werde auch mit einer Framerate von 15fps glücklich sein

Es scheint möglich zu sein, d. h. es gibt eine ähnliche App, die das tut, sie heißt "Talking Tom"

    
DevN 11.12.2012, 23:44
quelle

1 Antwort

1

Es hängt wirklich davon ab, wie Sie Ihre "Haustier-Ansicht" umsetzen. Zeichnest du auf einem Canvas? OpenGL ES? Normale Android-Ansichtshierarchie?

Wie auch immer, es gibt kein magisches "recordScreenToVideo ()" wie einer der Kommentare gesagt hat.

Sie müssen:

  • Erhalte Bitmaps, die deine "Frames" darstellen. Dies hängt davon ab, wie Sie Ihre Ansicht implementieren. Wenn Sie sich selbst zeichnen (Canvas oder OpenGL), speichern Sie Ihre Rohpixelpuffer als Rahmen. Wenn Sie die normale Ansichtshierarchie verwenden, erstellen Sie eine Unterklasse von Androids onDraw und speichern Sie die "Frames", die Sie auf der Leinwand erhalten. Die Häufigkeit des Systemaufrufs an onDraw ist nicht weniger als die tatsächliche "Bildfrequenz" des Bildschirms. Wenn nötig, duplizieren Sie anschließend Frames, um ein 15fps-Video zu liefern.

  • Kodieren Sie Ihre Bilder. Scheint so, als hättest du schon einen Mechanismus dafür, du brauchst ihn nur um effizienter zu sein.

Möglichkeiten, wie Sie die Kodierung optimieren können:

  • Cache Ihre Bitmaps (Frames) und kodieren Sie danach. Das wird funktionieren nur wenn dein erwartetes Video sonst relativ kurz ist Du wirst keinen Speicher mehr haben.
  • Nehmen Sie nur mit der Framerate auf, die Ihre App tatsächlich erzeugt (abhängig von der Art, wie Sie zeichnen) und verwenden Sie einen Encoder-Parameter, um ein 15fps-Video zu erzeugen (ohne 15 Bilder pro Sekunde zu liefern).
  • Passen Sie die Qualitätseinstellungen an das aktuelle Gerät an. Dies kann durch Ausführen eines versteckten CPU-Zyklustests beim Start der App und durch die Definition einiger Schwellenwerte erfolgen.
  • Kodieren Sie nur den relevantesten Teil des Bildschirms.
  • Auch hier kommt es wirklich auf die Art und Weise an, wie Sie es implementieren - wenn Sie einige "history data" speichern und diese dann in Frames konvertieren können, ohne dass Sie dies in Echtzeit tun müssen, wäre das das Beste. Zum Beispiel "bewegen", "lächeln", "Farbe ändern" - oder was auch immer Ihre Geschäftslogik ist, da Sie nicht näher darauf eingegangen sind. Ihre "Film generieren" -Funktion wird diese Verlaufsdaten als Bildsequenz animieren (ohne auf den Bildschirm zu zeichnen) und dann encodieren.

Ich hoffe, das hilft

    
SirKnigget 19.01.2013, 18:28
quelle

Tags und Links