【问题标题】:Why would AVPlayerItem not honor AVAudioTimePitchAlgorithmVarispeed setting?为什么 AVPlayerItem 不支持 AVAudioTimePitchAlgorithmVarispeed 设置?
【发布时间】:2015-05-13 16:31:50
【问题描述】:

我正在尝试根据我发送到 AVPlayer 的速率来更改 AVPlayerItem 的音频音高。

为此,我使用指定“AVAudioTimePitchAlgorithmVarispeed”的 AVAsset 初始化 AVPlayerItem,如下所示:

AVPlayerItem *nPlayerItem = [AVPlayerItem playerItemWithAsset:asset];
        [nPlayerItem setAudioTimePitchAlgorithm:AVAudioTimePitchAlgorithmVarispeed];

然后我将 playerItem 附加到 AVPlayer,但是当我将 AVPlayer 的速率设置为小于 1 或大于 1 时,音高不会改变。相反,AVPlayerItem 使用 'AVAudioTimePitchAlgorithmSpectral' 算法并且不遵守我指定的算法。我的目标是 10.9 并针对 10.9 进行构建。根据文档,此功能从 10.9 开始可用。

【问题讨论】:

  • 一旦我初始化了我的 AVPlayerItem,我确实检查了该项目的“canPlaySlowForward”属性,它返回 NO,我觉得很奇怪,因为我可以将速率设置为小于 1.0。

标签: cocoa avfoundation avplayer avplayeritem


【解决方案1】:

我通过以下方式解决了我的问题 1) 将 playerItem 添加到 AVPlayer 2) 在播放器项目的状态上设置键值观察 (KVO):

 - (void)observeValueForKeyPath:(NSString *)keyPath
                  ofObject:(id)object
                    change:(NSDictionary *)change
                   context:(void *)context {

       if ([object isKindOfClass:[AVPlayerItem class]] && [keyPath isEqualToString:@"status"]) {
           AVPlayerItem *nPlayerItem = (AVPlayerItem *)object;
           if([nPlayerItem status] == AVPlayerItemStatusReadyToPlay){
               [nPlayerItem setAudioTimePitchAlgorithm:AVAudioTimePitchAlgorithmVarispeed];
           }
       }
 }

只有当 playerItem 达到“AVPlayerItemStatusReadyToPlay”状态后,我才能成功地在 playerItems 的 audioTimePitchAlgorithm 上设置 AVAudioTimePitchAlgorithmVarispeed。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2016-08-24
    • 2011-03-17
    • 2018-07-21
    • 2013-01-04
    • 2017-10-07
    相关资源
    最近更新 更多