Ответ 1
Подтверждено. У меня на самом деле был билет с Apple DTS, открытый для этой проблемы, и была зарегистрирована ошибка. Поддерживаются только 0,50, 0,67, 0,80, 1,0, 1,25, 1,50 и 2,0. Все остальные настройки округлены до ближайшего значения.
так что казалось бы, что единственные значения, которые действительно работают, равны 0.0, 0.5, 1.0 и 2.0...
Я попытался установить его на 0,25, так как я хочу, чтобы он играл на 1/4-й скорости естественной скорости, но вместо этого он играл на 1/2 от естественной скорости. может ли кто-нибудь подтвердить это?
Подтверждено. У меня на самом деле был билет с 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. Я попытаюсь написать категорию, которая проверяет "на лету", какие значения поддерживаются, и при необходимости отключать неподдерживаемые треки.
br denis
UPDATE
Я написал функцию, которую вы можете вызвать, когда хотите установить скорость для видео ниже 0,5. Он включает/отключает все звуковые дорожки.
- (void)enableAudioTracks:(BOOL)enable inPlayerItem:(AVPlayerItem*)playerItem
{
for (AVPlayerItemTrack *track in playerItem.tracks)
{
if ([track.assetTrack.mediaType isEqual:AVMediaTypeAudio])
{
track.enabled = enable;
}
}
}
Я согласен с @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. Я использую видео, которые я захватил с помощью устройства, что может изменить ситуацию.
Пока,
Жан