Ошибка VideoView / MediaPlayer, иногда приводящая к сбою воспроизведения видео - PullRequest
2 голосов
/ 21 марта 2012

Я работаю над приложением для планшета, которое позволяет просматривать видео и просматривать их с помощью ViewPager.Видео используют VideoView.Он отлично работает на Xoom и Transformer Prime.На Galaxy Tab 10.1 чаще всего появляются ошибки видео после выбора новой страницы.Я получаю:

MediaPlayer Error(1,-214783648) 
VideoView Error: 1, -214783648

Видео загружается при выборе страниц, и я использую слушатель onPrepared, чтобы начать воспроизведение видео, как только оно загружено.Кажется, ошибка выдается до вызова onPrepared, но я вижу первый кадр видео, поэтому он загружен.Я пытался отложить воспроизведение, но это ничего не улучшило.Я попытался загрузить видео снова из OnErrorListener, как только это не удалось, который, кажется, работает иногда.Galaxy Tab - единственный планшет, который завис на 3.1, но я не уверен, что это как-то связано с ним.

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Насколько я могу судить, Galaxy Tab 10.1 (или Android 3.1 ... еще неизвестно) может декодировать только два видео одновременно.Так как я использую viewPager, в каждый момент времени может быть загружено 3 видео.Решение (хотя и дрянное) состоит в том, чтобы загружать только два видео, задерживая загрузку до тех пор, пока страница не будет выбрана и убедившись, что другие виды (кроме последнего активного вида) были уничтожены.

0 голосов
/ 22 февраля 2013

Я столкнулся с той же проблемой несколько дней назад.Вам не нужно уничтожать ваш Views мой дорогой anakin78z.

Я решил ту же проблему на своем планшете, добавив свой собственный SimpleOnPageChangeListener на мой ViewPager и добавив следующий код в мой слушатель:

@Override
public void onPageSelected(int position) {
    stopVideoView(position - 1);
    stopVideoView(position + 1);
    startVideoView(position);
}

private void startVideoView(int index) {
    VideoView videoView = getVideoView(index);
    if (videoView != null)
        videoView.start();
}

private void stopVideoView(int index) {
    VideoView videoView = getVideoView(index);
    if (videoView != null) {
        videoView.stopPlayback();
}

private VideoView getVideoView(int index){
    // Retrieve your videoviews here
}

Я почти уверен, что этот ответ пришел слишком поздно, но я надеюсь, что он кому-нибудь поможет!

...