Ошибка потоковой передачи Android MediaPlayer: 100: MEDIA_ERROR_SERVER_DIEDAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Ошибка потоковой передачи Android MediaPlayer: 100: MEDIA_ERROR_SERVER_DIED

Сообщение Anonymous »


Я разработал приложение, использующее преимущества встроенного в Android MediaPlayer. Исходный код моего класса, использующего Media Player, приведен ниже.

Проблема в том, что только на некоторых устройствах после нескольких миллисекунд воспроизведения (я слышу только голос, экран остается черным) я продолжаю получать error(100,0), о котором согласно документации написано< /п> public static Final int MEDIA_ERROR_SERVER_DIED

Медиа-сервер умер. В этом случае приложение должно освободить объект MediaPlayer и создать новый.

На форумах я обнаружил, что мне нужно перезагружать плеер каждый раз, когда я его получаю... но я получаю его через короткое время, а затем он умирает навсегда. Я не могу сбрасывать плеер каждую секунду, так как воспроизведение бесполезно. Я не могу понять, почему на некоторых устройствах возникает эта проблема, а на других нет. Тот, который я знаю, имеет ОС Android > 4.0.

Разумеется, сначала вызывается init(), а затем showVideo(). Затем вызывается последний onError с кодом 100. Каково потенциальное решение, позволяющее потокам работать непрерывно и не прерываться?
публичный класс NativePlayer расширяет Player реализует OnBufferingUpdateListener, OnCompletionListener, OnErrorListener, OnInfoListener { частный видеопросмотр VideoView; частный прослушиватель PlayerListener; частный контекст MainActivity; частный окончательный регистратор Logger = LoggerFactory.getLogger(NativePlayer.class); @Override public void init (активность MainActivity) { this.videoview = (VideoView) Activity.findViewById(R.id.video); контекст = активность; } @Override public void showVideo(url конечной строки, окончательный PlayerListener _listener) { слушатель = _listener; videoview.setVisibility(View.VISIBLE); пытаться { Uri видео = Uri.parse(url); videoview.setVideoURI(видео); } catch (Исключение е) { logger.error("Ошибка воспроизведения видео", e); прослушиватель.onVideoError(); возвращаться; } videoview.setOnCompletionListener(это); videoview.setOnErrorListener(это); видеопросмотр.requestFocus(); videoview.setOnPreparedListener(новый OnPreparedListener() { общественная недействительность onPrepared (MediaPlayer mp) { видеопросмотр.start(); если (слушатель != ноль) { прослушиватель.onVideoStarted(); } } }); } @Override общественная недействительность onStop() { останавливаться(); } частная недействительная остановка () { если (видеопросмотр == ноль) { возвращаться; } если (videoview.isPlaying()) { видеопросмотр.stopPlayback(); } } @Override общественная недействительность onDestroy () { } @Override общественная недействительность onCompletion (MediaPlayer mp) { останавливаться(); } @Override public boolean onError(MediaPlayer mp, int What, Int Extra) { если (слушатель != ноль) { прослушиватель.onVideoError(); } вернуть ложь; } @Override public boolean onInfo(MediaPlayer mp, int What, Int Extra) { если (слушатель != ноль) { прослушиватель.onInfo(что, дополнительно); } вернуть ложь; } @Override public void onBufferingUpdate(MediaPlayer mp, int процентов) { если (слушатель != ноль) { прослушиватель.onBufferingUpdate(процент); } } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»