Что означает AVErrorMediaServicesWereReset?

В настоящее время я пишу собственный видеоплеер, используя AVPlayer. Видео воспроизводится нормально и работает в 99% случаев. Но при поиске периодически сталкиваюсь с ошибкой. Статус моего AVPlayerItem изменяется на AVPlayerItemStatusFailed, а его свойство «ошибка» установлено на:

Домен ошибки = AVFoundationErrorDomain Code = -11819 «Невозможно выполнить действие» UserInfo = 0x541da00 {NSLocalizedRecoverySuggestion = Повторите попытку позже., NSLocalizedDescription = Невозможно выполнить действие}

Ошибка возникает в iOS 4.0.1 при поиске вперед в HTTP Live Stream. Чаще бывает, когда телефон в 3G или битрейт потока высокий. Чтобы воспроизвести воспроизведение, воспроизведите HTTP Live Stream с помощью AVPlayer на iOS 4.0.1 и выполните поиск вперед за пределами загруженного буфера — ошибка возникает примерно в 50% случаев.

Я обнаружил в AVError.h, что код ошибки AVFoundation -11819 соответствует AVErrorMediaServicesWereReset ("Операция не может быть завершена, так как службы мультимедиа стали недоступны") .

Кто-нибудь знает, что вызывает эту ошибку и как ее исправить? Я знаю, что исправление возможно, потому что MPMoviePlayerViewController (который использует AVPlayer) не показывает ошибку. К сожалению, из-за внешних ограничений я не могу использовать MPMoviePlayer в своем коде.

Спасибо!


person tba    schedule 29.06.2011    source источник


Ответы (1)


Оказывается, AVPlayer очень НЕ является потокобезопасным при поиске вперед в HTTP Live Stream на iOS 4.0.1. Часть моего кода называлась setNeedsDisplay или иным образом вызывала системный код пользовательского интерфейса, который «прерывал» проигрыватель во время рисования. Решение заключалось в том, чтобы не обновлять представление между моментом, когда пользователь ищет позицию, и моментом, когда игрок начинает играть с этой позиции. К счастью, это исправлено в 4.3+.

person tba    schedule 19.07.2011