Tôi đang gặp phải tình huống lạ với trình phát video của mình, mã cốt lõi không thay đổi nhiều so với những gì đã làm trong một ứng dụng trước đó mà tôi đã tạo. Đây là vấn đề: Tôi đang chèn một "_loadingLayer" (một CATextLayer cho biết video đang tải), và sau đó quan sát thuộc tính trạng thái currentItem của AVPlayer để tìm ra khi nào xóa "_loadingLayer" và thay thế nó bằng "_playerLayer" thực tế của tôi . Đây là mã KVO của tôi cho rằng:AV Foundation: Sự khác biệt giữa currentItem đã sẵn sàng để chơi và - [AVPlayer readyForDisplay] thuộc tính?
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ((object == _playerLayer) && (_playerLayer.player.currentItem.status == AVPlayerItemStatusReadyToPlay)) {
[CATransaction setAnimationDuration:1.8];
_loadingLayer.opaque = NO;
if (_playerLayer.readyForDisplay) {
NSLog(@"Should be ready now.");
}
[self addPlayerLayerToLayerTree];
}
}
Vấn đề của tôi là video đang bắt đầu nhưng chỉ âm thanh đang phát - lớp màu đen. Khi tôi chèn câu lệnh NSLog ở trên, tôi đã tìm ra lý do: Rõ ràng mặc dù trạng thái của currentItem là "AVPlayerItemStatusReadyToPlay", lớp người chơi không thực sự readyForDisplay. Điều này không có ý nghĩa với tôi - nó có vẻ phản trực giác. Ai đó có thể xin vui lòng cho tôi một số hướng dẫn về điều này?
Tôi đã có thể xác minh rằng _playerLayer đang được thêm vào cây lớp bằng cách đặt màu nền thành màu đỏ.
Một điều kỳ lạ khác mà tôi nghĩ rằng có thể liên quan .... Tôi đã nhìn thấy những tin nhắn trong trình gỡ lỗi giao diện điều khiển:
PSsetwindowlevel, thiết lập lỗi mức cửa sổ (1000) CGSSetIgnoresCycle: Lỗi 1000 thiết lập hoặc xóa các thẻ cửa sổ
Xin cảm ơn trước. Đây là một tiền đồn từ Diễn đàn Apple Dev.