2016-04-02 25 views
2

olarak adlandırıldım AVPlayerLayer kullanarak oynadığım bir video için yavaş oynatma hızını etkinleştirmeye çalışıyorum. Bunu yapmak için, AVPlayerItem, canPlaySlowForward için true döndürürse, belge rate'u 0,0 - 1,0 aralığında etkinleştireceğini belirtir. Bu özellik salt okunur, bu nedenle AVPlayerItem alt sınıfını almanız ve bunu gerçekleştirmek için bu özelliği geçersiz kılmanız gerekir. Bunu yaptım, ancak video hala yavaş bir hızda oynatmıyor, her zaman 1.0 oranı. Hiçbir zaman canPlaySlowForward özelliğini çağırmaz. Bu neden?AVPlayerItem'in canPlaySlowForward özelliği hiçbir zaman

import AVFoundation 

class SlowMoPlayerItem: AVPlayerItem { 

    override var canPlaySlowForward: Bool { 
     return true 
    } 

} 

oynatılması:

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() 

Ben videoya ilgili yapılacak tek şey/ses aracılığıyla, arka plan sesi durdurma engellemek geçerli:

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

video dosyası yapar bir ses parçası içermez, ancak bu dahil etmek hala gerekliydi.

cevap

3

play()'u aradıktan sonra rate'u ayarlayın. AVPlayerItem alt sınıfına gerek yoktur.

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 
} 
İlgili konular