AVPlayer
ma właściwość o nazwie rate
, która służy do kontrolowania szybkości odtwarzania. 1.0
to normalna prędkość, podczas gdy wartości takie jak 2.0
lub 5.0
powinny odtwarzać odpowiednio 2x i 5x.Jak uzyskać płynne odtwarzanie z AVPlayera?
Po ustawieniu wartości szybkości odtwarzania wyższej niż 1.0
(na przykład 10.0
), odtwarzanie jest bardzo niepewne i wygląda na to, że duża liczba klatek zostaje upuszczona, ponieważ odtwarzacz nie może nadążyć.
Jednak te same wartości w odtwarzaczu QuickTime (z tym samym filmem) zapewniają płynne odtwarzanie z szybkościami 2x, 5x, 10x, 30x and 60x
(zgodnie z raportem odtwarzacza QuickTime).
Stworzyłem testową aplikację OS X, która zawiera jedynie plik AVPlayerView
i dwa przyciski do ustawiania szybkości odtwarzania. Stawka w wysokości 1.0
działa zgodnie z oczekiwaniami, ale współczynnik 10.0
powoduje bardzo nierówne odtwarzanie.
Jednak AVPlayerView
ma dziwne dziwactwo na tym, że jeśli kliknięciem myszy na osi czasu odtwarzania, aby szukać w innym miejscu (w trakcie odtwarzania na 10x i niepewny), wówczas AVPlayerView
będzie „naprawić” odtwarzanie i film będą odtwarzane płynnie przy 10x. Wystarczyło kliknąć oś czasu odtwarzania.
Czy ktoś wie, jak uzyskać płynne odtwarzanie w tempie innym niż 1x? Oczywiście nie jest to problem ze sprzętem ani rozmiar pliku, ponieważ może to zrobić zarówno QuickTime Player, jak i AVPlayerView.
Próby
Ten question sugeruje, że może to być problem dźwięku (i rzeczywiście zarówno QuickTime Player i AVPlayerView wyciszyć dźwięk podczas przekazywania), ale wszystkie próby z mojej strony albo wyłączyć wszystkie ścieżki audio, wyciszenie wszystkich ślady lub zmiana algorytmu ścieżki dźwiękowej nie wydają się mieć znaczenia. Odtwarzanie było nadal niestabilne, nawet jeśli nie było dźwięku.
Próbowałem także zatrzymać odtwarzanie, a następnie zadzwonić pod numer prerollAtRate:completionHandler
, ale to też nie ma znaczenia.
Co robi odtwarzacz QuickTime Player i AVPlayerView, który umożliwia płynne odtwarzanie filmów z szybkością 10x, 30x lub nawet 60x?
Znaleźliście jakieś rozwiązanie tego problemu? Jeśli tak, to co to było? –
Nie, przepraszam. Skończyło się na tym, że musiałem zbudować własne rozwiązanie, ale nie jest tak dobre, jak bym chciał. Na dłuższą metę uważam, że najlepsze wrażenia podczas odtwarzania będą wymagały głębszego kopania i obsługi dekodowania klatek poza używaniem AVPlayera. – kennyc
Pod kontrolą macos 10.12.3/Xcode 8.2.1, potwierdziłem niektóre z powyższych: prędkości do 2.0 nie stanowi problemu, ale ustawienie "AVPlayer.rate" na wartość większą niż 2,0 powoduje ciągłe odtwarzanie; używanie AVPlayerView do zmiany częstotliwości odtwarzania daje płynne odtwarzanie dla wszystkich prędkości; ustawienie najpierw szybkości na 0.0, a następnie wywołanie 'prerollAtRate (atRate :, completionHandler:)' i ustawienie szybkości wysokiej w ramach procedury obsługi zakończenia nie rozwiąże problemu; utworzenie AVMutableComposition z tylko ścieżką wideo nie rozwiązuje problemu; wyłączenie ścieżki audio nie rozwiązuje problemu. – Jamborino