Jeśli renderujesz ramki z maksymalną prędkością, na większości urządzeń osiągniesz 60 fps. Musisz go ustawić zgodnie ze znacznikami czasu prezentacji dostarczonymi przez koder.
Na przykład, jeśli dane wejściowe to format obsługiwany przez system Android (na przykład typowy plik MP4), można użyć klasy MediaExtractor, aby wyodrębnić każdą klatkę. Znacznik czasu można pobrać przy pomocy getSampleTime()
. Chcesz opóźnić renderowanie o różnicę między znacznikami czasowymi w kolejnych klatkach - nie zakładaj, że pierwsza klatka będzie miała znacznik czasu równy zero.
Nie należy również zakładać, że klatki wideo pojawiają się ze stałą szybkością (na przykład 30 kl./s). W przypadku niektórych źródeł ramki pojawią się nierównomiernie.
Zobacz przykład "Odtwarzaj wideo (TextureView)" w Grafika, szczególnie w klasie SpeedControlCallback
. Film gen-eight-rects.mp4
używa zmiennych długości klatek, aby z niego korzystać. Jeśli zaznaczysz pole "Play at 60fps", znaczniki czasu prezentacji zostaną zignorowane.
Skąd się wziąłeś? – BlueVoodoo
Czy możesz opublikować swój kod. Byłoby pomocne debugowanie inn – itsmeagain
Mam ten sam problem, czy to wymyślił? – xiaowoo