2014-11-13 57 views
6

Bir AVPlayer’in durumunu, yalnızca "oran" ile kontrol edebileceğimi düşündüm. AVPlayer durumu nasıl kontrol edilir?

Bu

Bir oyuncu örneğini oluşturmak nasıl: Ben Bu, bu

println(player!.rate) 

böyle bir şey yapsın bazı sonradan noktada

player = AVPlayer(URL: stream) // streaming from the internet 
player!.play() 

keşfettim budur:

  • yılında Simülatör Çalışmıyorsa ya da çalışıyorsa "1.0" durumunda "0.0" aldım.
  • Oynatıcıyı başlatır ancak internet bağlantısını kesersem 1 ile 0 arasında bir değer değiştirir.
  • Ancak iPhone'umda, Uçak Modu'na girsem bile özellik 1 değerini koruyor ?!

Bunun neden olduğu ve akış durumunu nasıl kontrol edebildiğim konusunda herhangi bir fikrin var mı?

şimdiye kadar bir gözlemci denedi:

player!.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.New, context: nil) 

Ama yöntemi "observeValueForKeyPath" Benim iPhone testi durumunda ateş almaz.

+2

Oynatıcı! .currentItem.addObserver'ı kullanmayı deneyebilirsiniz ve bu işlem başlatılmalıdır. – gabbler

+0

Oh, bu embarassing olurdu ... Yarın kontrol edeceğim, teşekkürler! – andreas

cevap

1

Geçerli kullanıcıda @gabbler'ın önerdiği kullanıcı olarak bir gözlemci eklemeyle çalışamıyorum. durdurmak

NSNotificationCenter.defaultCenter().addObserverForName(
    AVPlayerItemFailedToPlayToEndTimeNotification, 
    object: nil, 
    queue: nil, 
    usingBlock: { notification in 
     self.stop() 
    }) 

Not() bir durdurma düğmesi tıklatıldığında sanki akışı durur, aynı sınıftaki bir yöntemdir:

Ancak böyle bir bildirim merkezi kullanılarak yardımcı oldu.

6

Kontrol dışarı the Apple docs here ve bölüm " gözlemlemek Anahtar Değeri" ilerleyin. Özellikle bu kısımda # 3.

Uygulamamın çalışmaya başlamasına yardımcı oldu. Sonuç kodum şunun gibidir:

//Global 
var player = AVPlayer() 

func setUpPlayer() { 
    //... 
    // Setting up your player code goes here 
    self.player.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions(), context: nil) 
    //... 
} 

// catch changes to status 
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    print("obsrved") 
} 
+0

küçük değişiklikler 'kılma fonk observeValue (forKeyPath ana yol: nesnesinin String ?,: Herhangi ?, değişimi: [NSKeyValueChangeKey: Herhangi] ?, bağlam: UnsafeMutableRawPointer) '{ baskı ("obsrved")} – Maor

İlgili konular