Свойство оценки AVPlayer не работает?

Так что может показаться, что единственные значения, которые на самом деле работают, это 0,0, 0,5, 1,0 и 2,0...

я попытался установить его на 0,25, так как я хочу, чтобы он играл на 1/4 от естественной скорости, но вместо этого он воспроизводил его на 1/2 от естественной скорости. Кто-нибудь может это подтвердить?

7 ответов

Решение

Подтверждено. У меня фактически был билет с Apple DTS, открытый для этой проблемы, и подана ошибка. Единственные поддерживаемые значения: 0,50, 0,67, 0,80, 1,0, 1,25, 1,50 и 2,0. Все остальные настройки округляются до ближайшего значения.

Ограничение скорости воспроизведения, по-видимому, связано с коррекцией основного тона, которая теперь настраивается в iOS 7 или более поздней версии.

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

Это похоже на настройку по умолчанию:

Низкое качество и очень низкий вычислительный алгоритм. Подходит для кратких эффектов быстрой перемотки вперед и назад, а также низкого качества голоса. Показатель привязан к {0,5, 0,666667, 0,8, 1,0, 1,25, 1,5, 2,0}.

Три другие настройки алгоритма позволяют вам снизить скорость воспроизведения до 1/32. Например, AVAudioTimePitchAlgorithmVarispeed отключает коррекцию высоты тона.

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

Я обнаружил, что меньшие значения действительно поддерживаются, но все дорожки в AVPlayerItem должны поддерживать скорость. Однако Apple не предоставляет свойство для отдельных дорожек, которое указывало бы, какие скорости поддерживаются, есть только свойство canPlaySlowForward для AVPlayerItem.

Я обнаружил, что AVPlayerItems со звуковой дорожкой не может воспроизводиться со скоростью ниже 0,5. Однако, если есть только видео дорожка, скорость может иметь произвольное небольшое значение, например 0,01. Я постараюсь написать категорию, которая на лету проверяет, какие значения поддерживаются, и при необходимости отключает неподдерживаемые треки.

бр денис

ОБНОВИТЬ

Я написал функцию, которую вы можете вызывать, когда хотите установить скорость для видео ниже 0,5. Включает / отключает все звуковые дорожки.

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

(Xcode 11.6, iOS 13.6, Swift 5)

Это не работает с

player.rate = 2.0

Работает с

player.playImmediately(atRate: 3.0)

Я согласен с @otto, привет ответ решил мою проблему.

/*
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);

Нет, у меня это нормально работает ( xcode 4.2) на ipad 2 ios 5. Я использовал AVPlayerDemo из ресурсов dev и изменил свойство rate с помощью ползунка, и он очень плавный, определенно без скачков. хотя поведение ниже 0,2 странно. возможно, скорость не линейная вблизи экстремальных значений, но определенно плавная. от 0.2 до 2. Я использую видео, снятые на устройстве, которые могут изменить ситуацию.

До свидания,

джинсовый

Вы должны инициализировать player следующим образом;

player.enableRate = правда

Другие вопросы по тегам