2014-11-13 33 views
6

Tôi nghĩ rằng tôi có thể kiểm tra trạng thái của một AVPlayer chỉ đơn giản bằng thuộc tính "rate".Cách kiểm tra trạng thái của AVPlayer?

Đây là cách tôi tạo một đối tượng người chơi:

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

Tại một số điểm sau đó tôi sẽ làm một cái gì đó như thế này

println(player!.rate) 

Đây là những gì tôi phát hiện ra:

  • Trong Simulator tôi nhận được "0.0" trong trường hợp người chơi không chạy hoặc "1.0" nếu nó đang chạy.
  • Nếu tôi khởi động trình phát nhưng ngắt kết nối internet, nó sẽ thay đổi giá trị từ 1 đến 0.
  • Tuy nhiên, trên iPhone của tôi thuộc tính giữ giá trị 1 ngay cả khi tôi vào Chế độ trên máy bay ?!

Bạn có biết tại sao điều đó xảy ra và cách tôi có thể kiểm tra điều kiện luồng không?

Tôi đã thử một quan sát viên cho đến nay:

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

Nhưng ngay cả những phương pháp "observeValueForKeyPath" không bị sa thải trong trường hợp kiểm tra iPhone của tôi.

+2

Bạn có thể thử sử dụng trình phát! .currentItem.addObserver và nó sẽ được kích hoạt. – gabbler

+0

Ồ, điều đó thật đáng hổ thẹn ... Tôi sẽ kiểm tra nó vào ngày mai, cảm ơn! – andreas

Trả lời

1

Tôi không thể làm cho nó hoạt động với việc thêm người quan sát trên currentItem như người dùng @gabbler đề xuất.

Tuy nhiên nó giúp sử dụng trung tâm thông báo như thế này:

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

Lưu ý rằng stop() là một phương pháp trong cùng một lớp mà dừng lại con suối như thể một nút dừng được nhấp.

6

Kiểm tra the Apple docs here và cuộn đến phần "Quan sát giá trị khóa". Đặc biệt # 3 trong phần đó.

Nó đã giúp tôi triển khai công việc của mình. Mã kết quả của tôi trông giống như sau:

//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

Thay đổi nhỏ 'ghi đè func observValue (forKeyPath keyPath: String ?, của đối tượng: Any ?, change: [NSKeyValueChangeKey: Any] ?, context: UnsafeMutableRawPointer?) { print (" obsrved ") }' – Maor

Các vấn đề liên quan