AVPlayer rate属性不起作用?

bog*_*don 15 avplayer

所以看起来实际工作的唯一值是0.0,0.5,1.0和2.0 ......

我尝试将它设置为0.25,因为我希望它以自然速度的1/4播放,但它以自然速度的1/2发挥它.谁能证实这一点?

ott*_*tto 25

播放速率限制似乎是由于音调校正,现在可以在iOS 7或更高版本中进行配置.

// This prevents the play rate from going below 1/2.
playerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithmLowQualityZeroLatency;
Run Code Online (Sandbox Code Playgroud)

这似乎是默认设置:

低质量和极低计算密集型音高算法.适合短暂的快进和倒带效果以及低质量的声音.速率快照为{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;
Run Code Online (Sandbox Code Playgroud)


小智 21

证实.我实际上有一张Apple DTS的门票可以解决这个问题并提交了一个错误.唯一支持的值是0.50,0.67,0.80,1.0,1.25,1.50和2.0.所有其他设置四舍五入到最接近的值.

  • 也支持负值,例如,您可以使用-2.0向后搜索. (4认同)
  • 希望苹果在文档中有这个!浪费了几个小时试图弄清正在发生的事情。 (3认同)

den*_*ase 7

我发现确实支持较小的值,但AVPlayerItem中的所有轨道都必须支持速度.但是,Apple并未在单个轨道上提供可指示支持的速率的属性,AVPlayerItem上只有属性canPlaySlowForward.

我发现,具有音轨的AVPlayerItems无法以低于0.5的速率播放.但是,如果只有视频轨道,则速率可以具有任意小的值,如0.01.我将尝试编写一个即时检查哪些值受支持的类别,并在需要时禁用不支持的轨道.

丹尼斯

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*ael 5

(Xcode 11.6、iOS 13.6、Swift 5)

它不适用于

player.rate = 2.0
Run Code Online (Sandbox Code Playgroud)

它适用于

player.playImmediately(atRate: 3.0)
Run Code Online (Sandbox Code Playgroud)