2012-08-17 26 views
7

Tôi đang xây dựng ứng dụng phát nhạc trực tuyến bằng AVPlayer. Mọi thứ đang hoạt động tốt, nhạc tiếp tục phát ở chế độ nền, v.v. Vấn đề của tôi là khi tôi mô phỏng mất kết nối trên điện thoại (tắt dữ liệu di động, chờ cho luồng dừng lại và sau đó bật lại) sẽ mất khoảng 2 phút cho các ứng dụng để điền vào bộ đệm ngay cả khi có một mạng 3G hiện tại (tôi có thể lướt web trong khi đó).iOS AVPlayer hoạt động chậm lại sau khi mất kết nối

Mọi thứ đều hoạt động trong trình mô phỏng nhưng không hoạt động trên thiết bị. Nếu tôi đợi 2 phút, tôi sẽ nhận được thông báo phát lại thích hợpLikelyToKeepUp và từ đó mọi thứ đều ổn, nhưng việc rebuffering sẽ chỉ là một vài giây. It's ok khi tôi mô phỏng băng thông thấp bằng cách tắt điều khiển băng thông trên router của tôi, nhưng khi tôi mô phỏng thay đổi tàu sân bay bằng cách tắt dữ liệu di động và chuyển nó trở lại của nó dài.

Tôi đang gọi beginInterruption trên "playbackBufferEmpty" và gọi endInterruption trên "playbackLikelyToKeepUp". Vấn đề chính là "playbackLikelyToKeepUp" đến quá muộn.

- (void)beginInterruption { 
self.backgroundTaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]; 
} 

- (void)endInterruptionWithFlags:(NSUInteger)flags { 
    [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTaskIdentifier]; 
    self.backgroundTaskIdentifier = UIBackgroundTaskInvalid; 
    if(self.interrupted) [self play]; 
    self.interrupted = NO; 
} 

Bất kỳ ý tưởng nào? Tôi đã dành cả ngày với vấn đề này, googled tất cả mọi thứ nhưng tôi bị mắc kẹt. Cảm ơn trước.

Trả lời

2

Tôi đã gặp tình huống tương tự vài tháng trước, kết luận của tôi là "playbackLikelyToKeepUp không đáng tin cậy".

Giải pháp của tôi được chọn theo cách thủ công TimeRange được đệm.

FYI, tôi đã tạo lớp AVPlayer để phát lại phương tiện từ xa - HysteriaPlayer. Bạn có thể sử dụng trực tiếp hoặc tra cứu tệp .m.

Hy vọng điều này sẽ hữu ích.

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