【问题标题】:AVPlayer rate property does not work?AVPlayer 速率属性不起作用?
【发布时间】:2023-03-14 06:13:01
【问题描述】:

所以看起来唯一有效的值是 0.0、0.5、1.0 和 2.0...

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

【问题讨论】:

标签: avplayer


【解决方案1】:

不,它在 ipad 2 ios 5 上对我来说工作正常(xcode 4.2)。我使用了开发资源中的 AVPlayerDemo 并使用滑块修改了 rate 属性,它非常流畅,绝对没有跳跃。低于 0.2 的行为很奇怪。也许速率在极值附近不是线性的,但绝对是平滑的。从 0.2 一直到 2。我正在使用我用设备拍摄的视频,这可能会有所作为。

【讨论】:

    【解决方案2】:

    (Xcode 11.6、iOS 13.6、Swift 5)

    不适合

    player.rate = 2.0
    

    它适用于

    player.playImmediately(atRate: 3.0)
    

    【讨论】:

      【解决方案3】:

      播放速率限制似乎是由于音高校正,现在可以在 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;
      

      【讨论】:

      • 如果我的 AVPlayer 在 AVPlayerViewController 中,我可以使用这些吗?
      • 我相信是的。您可以向AVPlayerViewController 询问其player。然后,您可以向player 询问其currentItemAVPlayerItem 具有 audioTimePitchAlgorithm 属性。
      • 好的,我会试试的,在那之前请你看看我的问题:stackoverflow.com/questions/47514282/…
      • 播放视频时似乎不正确。您可以将值设置得更低,但在 iOS 上观察到的播放速率(通过读取时基)永远不会低于 0.5(在 iOS 13/14+ 上测试)
      【解决方案4】:

      我同意@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);
      

      【讨论】:

        【解决方案5】:

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

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

        br 丹尼斯

        更新

        我写了一个函数,只要你想将视频的速率设置为低于 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 6、iOS 8、iPhone 5 上测试过的那样,当我禁用包含音轨的 .mov 中的音频时,这会起作用。注意:在 iOS 6 上,它仍然以 0.5 的最小值播放。
        【解决方案6】:

        已确认。实际上,我为此问题打开了 Apple DTS 的票,并提交了一个错误。唯一支持的值是 0.50、0.67、0.80、1.0、1.25、1.50 和 2.0。所有其他设置都四舍五入到最接近的值。

        【讨论】:

        • 对您的错误报告有任何回应吗?
        • 也支持负值,例如可以使用-2.0进行向后搜索。
        • 希望苹果有这个文档!浪费了几个小时试图弄清楚发生了什么。
        • @Jeff 你能分享一下包含你答案的苹果官方文档吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-06
        • 2019-01-26
        相关资源
        最近更新 更多