首页 文章

从未调用过AVPlayerItem的canPlaySlowForward属性

提问于
浏览
2

我'm trying to enable slow playback rate for a video I'正在玩 AVPlayerLayer . 为此,文档说明如果 AVPlayerItemcanPlaySlowForward 返回 true ,它将在0.0 - 1.0的范围内启用 rate . 此属性是只读的,因此您需要子类 AVPlayerItem 并覆盖此属性才能完成此操作 . 我've done that, but the video still does not playing at a slow rate, it'总是1.0率 . 它甚至从未调用 canPlaySlowForward 属性 . 为什么是这样?

import AVFoundation

class SlowMoPlayerItem: AVPlayerItem {

    override var canPlaySlowForward: Bool {
        return true
    }

}

播放视频:

let asset = AVAsset(URL: NSBundle.mainBundle().URLForResource("some-video", withExtension: "mp4")!)
let playerItem = SlowMoPlayerItem(asset: asset)
let player = AVPlayer(playerItem: playerItem)
player.rate = 0.5
player.muted = true

let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.layer.bounds
self.view.layer.addSublayer(playerLayer)
player.play()

我做的唯一与视频/音频相关的事情是阻止它停止背景音频,通过:

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
}

视频文件不包含音轨,但仍需要包括 .

1 回答

  • 3

    调用 play() 后设置 rate . 无需子类 AVPlayerItem .

    func playVideo() {
        let asset = AVAsset(URL: NSBundle.mainBundle().URLForResource("SampleVideo", withExtension: "mp4")!)
        let playerItem = AVPlayerItem(asset: asset)
        let player = AVPlayer(playerItem: playerItem)
        let playerLayer = AVPlayerLayer(player: player)
        playerLayer.frame = self.view.bounds
        self.view.layer.addSublayer(playerLayer)
        player.play()
        player.rate = 0.5
    }
    

相关问题