Мой вопрос заключается в том, что слишком много MediaPlayers приводит к сбою IOException: status = 0x1 для регистрации?
Как моя программа работает, я использую отдельный экземпляр Media Player для каждого видео, которое я хочу воспроизвести. В конце прогона я остановил видеоплеер, отпустил его и повернул его нуль; это нормально иногда, но в других случаях, когда я слишком быстро переключаюсь между видео, я получаю исключение IO, и видео не будет воспроизводиться. У меня также есть медиаплеер, играющий некоторую фоновую музыку в сервисе.
В основном моя активность по видео получает новый вызов каждый раз, когда файл заканчивает воспроизведение. Может ли это быть ошибкой, и я должен попытаться просто повторно использовать один и тот же медиаплеер с другим файлом?
заранее спасибо
Я нашел свой собственный ответ. Я не знаю, хорошо ли это сделать, но:
if(videoFile != null)
{
Log.i("INITPLAYER", videoFile);
afd = getAssets().openFd(videoFile);
instructionVideoPlayer = new MediaPlayer();
instructionVideoPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
instructionVideoPlayer.setDisplay(holder);
instructionVideoPlayer.prepare();
instructionVideoPlayer.setOnCompletionListener(instructionVideoComplete);
instructionVideoPlayer.setOnPreparedListener(this);
}
else
Log.i("VideoPlayer", "noVideoFile");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
Log.i(this.toString(), "IOEXception");
e.printStackTrace();
//Here is the fix:
instructionVideoPlayer.release();
instructionVideoPlayer = null;
initPlayer();
// reinit after prepare failed. although this can bring in an infinte loop if video file does not exits
} catch (Exception e)
{
Log.i("InitPlayer", e.getClass().toString());
e.printStackTrace();
}