AVPlayerLayer
を使用して再生しているビデオの再生速度を遅くしようとしています。これを行うにはAVPlayerItem
がのcanPlaySlowForward
を返した場合にはrate
が0.0〜1.0の範囲で有効になることがドキュメントに記載されています。このプロパティは読み取り専用なので、AVPlayerItem
をサブクラス化し、このプロパティをオーバーライドしてこれを達成する必要があります。私はそれをやったが、ビデオはまだ低速で再生されていない、それは常に1.0レートです。それはcanPlaySlowForward
プロパティを呼び出すことさえありません。どうしてこれなの?ビデオの再生AVPlayerItemの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)
}
ビデオファイルませんオーディオトラックは含まれていませんが、これはまだ含まれている必要があります。