AVPlayerItem 的 canPlaySlowForward 属性 从未调用过
AVPlayerItem's canPlaySlowForward property never called
我正在尝试为正在使用 AVPlayerLayer
播放的视频启用慢速播放。为此,文档指出如果 AVPlayerItem
returns true
为 canPlaySlowForward
,它将在 0.0 - 1.0 范围内启用 rate
。此 属性 是只读的,因此您需要继承 AVPlayerItem
并覆盖此 属性 以完成此操作。我已经这样做了,但视频仍然没有以较慢的速度播放,它始终是 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()
我做的与 video/audio 相关的另一件事是防止它停止背景音频,通过:
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
}
视频文件不包含音轨,但这仍然是必要的。
调用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
}
我正在尝试为正在使用 AVPlayerLayer
播放的视频启用慢速播放。为此,文档指出如果 AVPlayerItem
returns true
为 canPlaySlowForward
,它将在 0.0 - 1.0 范围内启用 rate
。此 属性 是只读的,因此您需要继承 AVPlayerItem
并覆盖此 属性 以完成此操作。我已经这样做了,但视频仍然没有以较慢的速度播放,它始终是 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()
我做的与 video/audio 相关的另一件事是防止它停止背景音频,通过:
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
}
视频文件不包含音轨,但这仍然是必要的。
调用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
}