2016-02-13 14 views
7

Ứng dụng iOS của tôi sử dụng AVPlayer để truyền trực tuyến phương tiện từ web. Tôi đang sử dụng KVO để phát hiện các sự kiện như đệm (playbackBufferEmpty) và bị bắt (playbackLikelyToKeepUp). Tuy nhiên, tôi đã nhận thấy một lỗi cụ thể. Mặc dù trong quá trình giảm tốc độ mạng hầu hết, nhưng KVO playbackBufferEmpty bị va đập và khi nó phục hồi, thì KV1 playbackLikelyToKeepUp bị ảnh hưởng như mong đợi, tôi nhận thấy rằng (với một số tần số) AVPlayer sẽ lưu trong một khoảng thời gian, phục hồi, playbackLikelyToKeepUp , âm thanh phát trong khoảng từ 1 đến 3 giây và sau đó âm thanh sẽ ngừng phát lại như thể đang lưu vào bộ đệm— mà không cần nhấn lại vào playbackBufferEmpty KVO. Và nó không phục hồi từ điều này.AVPlayer Not Recovering After Buffering

TL; DR: playbackBufferEmpty (10-20 giây) ->playbackLikelyToKeepUp -> lượt phát từ 1-3s -> dừng phát nhưng không có KVO nào bị trúng.

Phần tồi tệ nhất là khi điều này xảy ra, AVPlayer không tự động bắt đầu phát lại như khi khôi phục từ bộ đệm và ứng dụng im lặng cho đến khi AVPlayer được dừng lại/bắt đầu lại theo cách thủ công. Nó xảy ra nhiều hơn hoặc ít hơn mỗi khi tôi phát trực tuyến, cuối cùng. Đây có phải là sự cố đã biết với AVPlayer không? Đây có phải là sự kiện KVO thứ ba mà tôi có thể theo dõi không? Hoặc bất kỳ lời khuyên nào về cách gỡ lỗi này? Cảm ơn!

EDIT: thêm thông tin: error Khách sạn AVPlayer 's là nil khi điều này xảy ra, status tài sản là Ready to Play, và rate tài sản là 1. AKA Không có gì khác lạ xảy ra, như xa như tôi có thể nói.

Trả lời

0

Tôi cũng đã có kinh nghiệm vấn đề với AVPlayer phục hồi từ các vấn đề đệm/mạng, và tôi cũng có kịch bản chính xác cùng một nơi avPlayer.status.readyToPlay, avPlayer.errornilavPlayer.rate1. Nói về không đáng tin cậy! Tôi cũng đã kiểm tra errorLog() và điều đó không cung cấp bất kỳ điều gì có liên quan ngoài lỗi kết nối internet chung chung.

Tôi cố gắng phát hiện trạng thái này bằng cách có bộ hẹn giờ, khi nó hết giờ, tôi kiểm tra thời gian video hiện tại và thời gian khi bộ hẹn giờ bắt đầu và nếu nó giống nhau (video không tiến triển), chúng ta có thể giả sử video thực sự không phát khi nó tuyên bố rằng nó là.

Sau đó, tôi coi đây là trạng thái không thể khôi phục và tải lại toàn bộ luồng bằng cách tạo AVPlayerItem mới.