所以看起来实际工作的唯一值是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.所有其他设置四舍五入到最接近的值.
我发现确实支持较小的值,但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)
(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)
| 归档时间: |
|
| 查看次数: |
9771 次 |
| 最近记录: |