2013-11-08 4 views
5

Я разработал приложение, которое использует преимущество родного Android MediaPlayer. Исходный код моего класса, использующий Media Player, приведен ниже. Проблема заключается в том, что только на некоторых устройствах после некоторых миллисекунд воспроизведения (я слышу только голос, экран остается черным) я получаю сообщение об ошибке(), который 100,0 в соответствии с доку говорит http://developer.android.com/reference/android/media/MediaPlayer.html#MEDIA_ERROR_SERVER_DIEDОшибка потоковой передачи данных для Android-андроида 100

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

, конечно, первый init(), а затем showVideo() вызывается. Вызывается последний onError со 100 кодом. что потенциальное решение, чтобы сделать потоки бежать и не ломаются через мгновение ...

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

public class NativePlayer extends Player implements OnBufferingUpdateListener, 
     OnCompletionListener, OnErrorListener, OnInfoListener { 

    private VideoView videoview; 
    private PlayerListener listener; 
    private MainActivity context; 

    private final Logger logger = LoggerFactory.getLogger(NativePlayer.class); 

    @Override 
    public void init(MainActivity activity) { 
     this.videoview = (VideoView) activity.findViewById(R.id.video); 
     context = activity; 
    } 

    @Override 
    public void showVideo(final String url, final PlayerListener _listener) { 
     listener = _listener; 
     videoview.setVisibility(View.VISIBLE); 
     try { 
      Uri video = Uri.parse(url); 
      videoview.setVideoURI(video); 
     } catch (Exception e) { 
      logger.error("Error playing video", e); 
      listener.onVideoError(); 
      return; 
     } 

     videoview.setOnCompletionListener(this); 
     videoview.setOnErrorListener(this); 
     videoview.requestFocus(); 

     videoview.setOnPreparedListener(new OnPreparedListener() { 
      public void onPrepared(MediaPlayer mp) { 
       videoview.start(); 
       if (listener != null) { 
        listener.onVideoStarted(); 
       } 
      } 
     }); 
    } 

    @Override 
    public void onStop() { 
     stop(); 
    } 

    private void stop() { 
     if (videoview == null) { 
      return; 
     } 
     if (videoview.isPlaying()) { 
      videoview.stopPlayback(); 
     } 
    } 

    @Override 
    public void onDestroy() { 
    } 

    @Override 
    public void onCompletion(MediaPlayer mp) { 
     stop(); 
    } 

    @Override 
    public boolean onError(MediaPlayer mp, int what, int extra) { 
     if (listener != null) { 
      listener.onVideoError(); 
     } 
     return false; 
    } 

    @Override 
    public boolean onInfo(MediaPlayer mp, int what, int extra) { 
     if (listener != null) { 
      listener.onInfo(what, extra); 
     } 
     return false; 
    } 

    @Override 
    public void onBufferingUpdate(MediaPlayer mp, int percent) { 
     if (listener != null) { 
      listener.onBufferingUpdate(percent); 
     } 
    } 
} 

ответ

0

У меня была такая же проблема (ошибка 100, медиаплеер умер, и т.д.). Я разрешаю его, используя .stopPlayback() и снова запуская поток. Ниже моя часть кода:

private void startWatchVideo(final string video_link) { 
     videoViewVA.setMediaController(new MediaController(this)); 
     videoViewVA.setVideoURI(Uri.parse(video_link)); 
     videoViewVA.requestFocus(); 
     videoViewVA.setOnPreparedListener(new OnPreparedListener() { 
      public void onPrepared(MediaPlayer media) { 
       media.start(); 
      } 
     }); 

     videoViewVA.setOnErrorListener(new OnErrorListener() { 
      @Override 
      public boolean onError(MediaPlayer media, int what, int extra) { 
       if (what == 100) 
       { 
        videoViewVA.stopPlayback(); 
        startWatchVideo(video_link); 
       } 
       return true; 
      } 
     }); 
    } 

На практике это выглядит как видео только замедляет

+0

спасибо за отзывы :) жаль сказать, но у меня есть устройство Huawei здесь, который говорит об ошибке 100 и ничто не помогает ему играть в HLS, просто переключение на альтернативного игрока устраняет проблему :( – basta

+0

Если решение не работает и перезапуск видео приводит к 100 снова, вы попадете в цикл запуска и остановки видео. – Alf

+0

@Kim я добавил счет повтора, я попробовал 2 раза, если снова не смог я показал сообщение об ошибке. –

Смежные вопросы