MediaPlayer готовит сбой IOException

1

Мой вопрос заключается в том, что слишком много MediaPlayers приводит к сбою IOException: status = 0x1 для регистрации?

Как моя программа работает, я использую отдельный экземпляр Media Player для каждого видео, которое я хочу воспроизвести. В конце прогона я остановил видеоплеер, отпустил его и повернул его нуль; это нормально иногда, но в других случаях, когда я слишком быстро переключаюсь между видео, я получаю исключение IO, и видео не будет воспроизводиться. У меня также есть медиаплеер, играющий некоторую фоновую музыку в сервисе.

В основном моя активность по видео получает новый вызов каждый раз, когда файл заканчивает воспроизведение. Может ли это быть ошибкой, и я должен попытаться просто повторно использовать один и тот же медиаплеер с другим файлом?

заранее спасибо

Теги:
media-player
prepare

1 ответ

1
Лучший ответ

Я нашел свой собственный ответ. Я не знаю, хорошо ли это сделать, но:

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();
    }
  • 0
    Это действительно помогло мне тоже. просто звоню релизу. !

Ещё вопросы

Сообщество Overcoder
Наверх
Меню