Что означает MEDIA_ERROR_SERVER_DIED?
-
27-10-2019 - |
Вопрос
В документах Android есть константа, определенный MEDIA_ERROR_SERVER_DIED
, который описывается как:
Медиа-сервер умер.В этом случае приложение должно освободить объект MediaPlayer и создать новый экземпляр.
Это кажется очень расплывчатым.Что значит умер Медиа-сервер?Зачем ему умереть?И правильно ли справляться с этим, сразу же пытаясь сыграть снова после этого?
Решение
В Android большая часть операций с мультимедиа (декодирование / кодирование) происходит в медиасервере, за исключением ограниченных случаев, таких как локальное воспроизведение файлов с использованием программного кодека. Android mediaserver обычно дает сбой (прерывание) из-за аппаратных ошибок, неправильно отформатированных файлов или данных. Ага, прости!
Поскольку для многих действий используется общий медиасервер, ошибка в любом из действий может привести к сбою медиасервера. Чаще всего это происходит, когда фоновая активность, такая как медиа-сканер или Google+ Auto-Awesome Movies, пытается отсканировать поврежденный или просто неподдерживаемый файл. Когда это происходит, остальные процессы, которые использовали mediaserver, получают уведомление. Это уведомление передается в приложение в случае MediaPlayer или MediaRecorder.
Когда mediaserver умирает, он немедленно перезапускается. Несмотря на то, что сервер умирает, прокси-объект в приложении все еще жив и использует ресурсы. Следовательно, необходимо освободить объект. Создать новый сразу после уведомления должно быть безопасно.
Другие советы
Одно из условий, которое вызывает это, - когда MediaPlayer не получает или перестает получать видеопоток с сервера.Если ошибка постоянно возникает немедленно (т. Е. Если видео не принимается вообще), вы можете убедиться, что ничто (брандмауэр, VPN и т. Д.) Не блокирует ваш маршрут к серверу.
Это означает, что сервер, с которого вы транслируете, неожиданно прервал соединение.Такое бывает, обычно это связано с ошибкой «Сброс соединения одноранговым узлом».
Вы можете попробовать восстановить соединение, да, возможно, немного подождав.