2011-07-08 12 views
10

, więc wydaje się, że jedynymi wartościami, które faktycznie działają są 0,0, 0,5, 1,0 i 2,0 ...Właściwość rate AVPlayer nie działa?

próbowałem ustawić go na 0.25, ponieważ chcę, aby grał z prędkością 1/4 naturalnej prędkości, ale zamiast tego grał na 1/2 naturalnej prędkości. Czy ktoś może to potwierdzić?

+0

Możliwe duplikat [odtwarzania Jerky z avplayer o stosowaniu z szybkością większą niż 2x] (http://stackoverflow.com/questions/40506059/jerky-playback-from-avplayer-on-applying-rate-greater- than-2x) –

Odpowiedz

15

potwierdzone. Faktycznie miałem bilet z Apple DTS otwartym na ten problem i zgłoszono błąd. Jedyne obsługiwane wartości wynoszą 0,50, 0,67, 0,80, 1,0, 1,25, 1,50 i 2,0. Wszystkie pozostałe ustawienia są zaokrąglane do najbliższej wartości.

+0

Jakaś odpowiedź na zgłoszenie błędu? –

+3

Ujemne wartości są również obsługiwane, na przykład można użyć -2,0 do wyszukiwania wstecz. –

+1

Życzenie jabłko miało to w tam docs! zmarnowane kilka godzin próbując wyjaśnić, co się dzieje. – DogCoffee

0

Nie działa dla mnie dobrze (xcode 4.2) na ipad 2 ios 5. Użyłem AVPlayerDemo z zasobów dev i zmodyfikuj właściwość rate z suwakiem i jest bardzo płynny, zdecydowanie bez skoków. jednak zachowanie poniżej 0,2 jest dziwne. może tempo nie jest liniowe w pobliżu wartości ekstremalnych, ale zdecydowanie gładkie. od 0,2 aż do 2. Używam filmów zrobionych za pomocą urządzenia, które mogą coś zmienić.

Bye,

Jean

+1

Używam xcode 4.3 ipad ios 5 i nie działają. 0.5

4

Odkryłem, że mniejsze wartości są rzeczywiście obsługiwane, ale wszystkie ścieżki w AVPlayerItem muszą obsługiwać prędkość. Jednak firma Apple nie udostępnia właściwości poszczególnych ścieżek, które wskazywałyby, jakie stawki są obsługiwane, w produkcie AVPlayerItem istnieje tylko właściwość canPlaySlowForward.

Odkryłem, że AVPlayerItems ze ścieżką audio nie mogą być odtwarzane z szybkościami wolniejszymi niż 0,5. Jeśli jednak istnieje tylko ścieżka wideo, szybkość może mieć dowolnie małą wartość, np. 0,01. Postaram się napisać kategorię, która sprawdza na bieżąco, jakie wartości są obsługiwane i wyłącza nieobsługiwane ścieżki, jeśli jest taka potrzeba.

br Denis

UPDATE

pisałem funkcji, które można wywołać, gdy chcesz ustawić stawkę za wideo poniżej 0,5. Włącza/wyłącza wszystkie ścieżki audio.

- (void)enableAudioTracks:(BOOL)enable inPlayerItem:(AVPlayerItem*)playerItem 
{ 
    for (AVPlayerItemTrack *track in playerItem.tracks) 
    { 
     if ([track.assetTrack.mediaType isEqual:AVMediaTypeAudio]) 
     { 
      track.enabled = enable; 
     } 
    } 
} 
+1

Miałem okazję przetestować kod ... czas na głosowanie tego jako PEŁNA ODPOWIEDŹ na to pytanie. Działa to tak, jak opisano, gdy wyłączam dźwięk w pliku .mov, który zawiera ścieżkę dźwiękową, tak jak testowano na XCode 6, iOS 8, iPhone 5. UWAGA: na iOS 6 nadal odtwarzane jest minimum 0,5. –

19

Ograniczenie szybkość gra wydaje się być spowodowane korektą skoku, który jest teraz konfigurowalny w iOS 7 lub nowszej.

// This prevents the play rate from going below 1/2. 
playerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmLowQualityZeroLatency; 

To wydaje się być ustawienie domyślne:

niskiej jakości i bardzo niskiej intensywne obliczeniowo algorytm pitch. Odpowiedni do krótkich efektów przewijania do przodu i do tyłu oraz głosu niskiej jakości. Stawka jest zwiększana do {0,5, 0,666667, 0,8, 1,0, 1,25, 1,5, 2,0}.

Pozostałe trzy ustawienia algorytmu umożliwiają zmianę szybkości odtwarzania do 1/32. Na przykład AVAudioTimePitchAlgorithmVarispeed wyłącza korektę wysokości tonu.

// Enable play rates down to 1/32. 
playerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmVarispeed; 
+0

Czy mogę ich użyć, jeśli mój AVPlayer znajduje się wewnątrz kontrolera AVPlayerViewController? – Nil

+0

Tak sądzę. Możesz zapytać 'AVPlayerViewController' o jego' player'. Możesz wtedy poprosić 'gracza' o jego' currentItem'. To 'AVPlayerItem' ma właściwość' audioTimePitchAlgorithm'. – otto

+0

ok, spróbuję tego, do tego czasu, czy mógłbyś rzucić okiem na moje pytanie tutaj: https://stackoverflow.com/questions/47514282/ios-avplayer-cant-play-240-fps-video – Nil

1

Zgadzam się z @otto, cześć odpowiedziałem rozwiązany mój problem.

/* 
AVAudioProcessingSettings.h 


@abstract  Values for time pitch algorithm 

@constant  AVAudioTimePitchAlgorithmLowQualityZeroLatency 
      Low quality, very inexpensive. Suitable for brief fast-forward/rewind effects, low quality voice. 
      Rate snapped to {0.5, 0.666667, 0.8, 1.0, 1.25, 1.5, 2.0}. 

@constant  AVAudioTimePitchAlgorithmTimeDomain 
      Modest quality, less expensive. Suitable for voice. 
      Variable rate from 1/32 to 32. 

@constant  AVAudioTimePitchAlgorithmSpectral 
      Highest quality, most computationally expensive. Suitable for music. 
      Variable rate from 1/32 to 32. 

@constant  AVAudioTimePitchAlgorithmVarispeed 
      High quality, no pitch correction. Pitch varies with rate. 
      Variable rate from 1/32 to 32. 
*/ 

AVF_EXPORT NSString *const AVAudioTimePitchAlgorithmLowQualityZeroLatency NS_AVAILABLE_IOS(7_0); 
AVF_EXPORT NSString *const AVAudioTimePitchAlgorithmTimeDomain NS_AVAILABLE(10_9, 7_0); 
AVF_EXPORT NSString *const AVAudioTimePitchAlgorithmSpectral NS_AVAILABLE(10_9, 7_0); 
AVF_EXPORT NSString *const AVAudioTimePitchAlgorithmVarispeed NS_AVAILABLE(10_9, 7_0); 
Powiązane problemy