Wenn Sie Frames mit maximaler Geschwindigkeit rendern, werden auf den meisten Geräten 60 fps erreicht. Sie müssen es entsprechend den vom Encoder bereitgestellten Präsentationszeitmarken takten.
Wenn die Eingabe beispielsweise ein von Android unterstütztes Format ist (z. B. eine typische .mp4-Datei), können Sie die Klasse MediaExtractor verwenden, um jeden Frame zu extrahieren. Der Zeitstempel kann mit getSampleTime()
abgerufen werden. Sie möchten das Rendering um den Unterschied zwischen Zeitstempeln in aufeinander folgenden Frames verzögern - gehen Sie nicht davon aus, dass der erste Frame einen Zeitstempel von Null haben wird.
Gehen Sie auch nicht davon aus, dass Videobilder mit einer konstanten Rate (z. B. 30 fps) angezeigt werden. Bei einigen Quellen werden die Bilder ungleichmäßig ankommen.
Siehe das Beispiel "Play video (TextureView)" in Grafika, insbesondere die SpeedControlCallback
Klasse. Das Video gen-eight-rects.mp4
verwendet variable Rahmendauern, um es auszuprobieren. Wenn Sie das Kontrollkästchen "Bei 60 Bildern pro Sekunde abspielen" aktivieren, werden die Präsentationszeitstempel ignoriert.
Wohin sind Sie dabei gekommen? – BlueVoodoo
Können Sie Ihren Code bitte posten? Es wäre hilfreich, Debugging – itsmeagain
Ich habe das gleiche Problem, haben Sie es herausgefunden? – xiaowoo