2016-04-13 71 views
4

AVFoundation ile hızlı ileri ve geri oynatmayı gerçekten uygulamak istiyorum.AVPlayerItem'in canPlayFastForward yöntemi neden False?

Bildiğim kadarıyla, AVPlayerItem'in canPlayReverse ve canPlayFastForward False değerini döndürürse, sadece AVPlayer ile 0.0 ~ 2.0 oranı oynayabilirim.

Fakat -1.0'a ihtiyacım var ve 2.0'ın üzerine çıkıyorum.

Sorunum sonuç yanlıştır Sadece neden zaman ve bulamıyor olmasıdır.

Apple'ın belgesinde canPlayFastForward ifadesinin ne zaman yanlış döndüğü hakkında hiçbir şey yoktur.

kimse ve nedencanPlayFastForward & canPlayReverse sonuçlarıyanlış olduğunu ve bunu gerçek nasıl değiştirebilirim açıklayabilir misiniz?

cevap

2

imkanı size .readToPlay s mülkiyet status değişikliklere 'AVPlayerItem önce lar canPlayReverse veya canPlayFastForward' AVPlayerItem kontrol ediyoruz olduğunu. Bunu yapıyorsanız, her zaman false'u alacaksınız.

böyle yapamaz Do:

import AVFoundation 

let anAsset = AVAsset(URL: <#A URL#>) 
let playerItem = AVPlayerItem(asset: anAsset) 
let canPlayFastForward = playerItem.canPlayFastForward 
if (canPlayFastForward){ 
    print("This line won't execute") 
} 

yerine AVPlayerItem 'ın mülkü status gözlemleyin. Aşağıdakiler,

AVPlayerItem nesneleri dinamiktir. AVPlayerItem.canPlayFastForward değeri, tüm dosya tabanlı varlıkları ve bazı akışa dayalı varlıklar için (kaynak çalma listesi, oynatmaya hazır olduğunda ortam sağlarsa) EVET olarak değişir. Oyuncu öğesi oynatmaya hazır olduğunda bildirim almak için yolu, AVPlayerItem.status özelliğini (KVO) Anahtar Değer Gözlemleme yoluyla gözlemleyerek 'dır. aynı sınıfta observeValue yönteme Ovveride

import AVFoundation 
dynamic var songItem:AVPlayerItem! //Make it instance variable 

let anAsset = AVAsset(URL: <#A URL#>) 
let songItem = AVPlayerItem(asset: anAsset) 
playerItem.addObserver(self, forKeyPath: "status", options: .new, context: nil) 

:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
     if let status = change?[.newKey] as? Int{ 
      if(status == AVPlayerItemStatus.readyToPlay.rawValue){ 
       yourPlayer.rate = 2.0 // or whatever you want 
      } 
     } 

    } 

songItem durum gözlemciden bu sınıfı kaldırmak unutmayın

deinit { 
     playerItem.removeObserver(self, forKeyPath: "status") 
    }