Я разработал приложение, которое использует преимущество родного 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);
}
}
}
спасибо за отзывы :) жаль сказать, но у меня есть устройство Huawei здесь, который говорит об ошибке 100 и ничто не помогает ему играть в HLS, просто переключение на альтернативного игрока устраняет проблему :( – basta
Если решение не работает и перезапуск видео приводит к 100 снова, вы попадете в цикл запуска и остановки видео. – Alf
@Kim я добавил счет повтора, я попробовал 2 раза, если снова не смог я показал сообщение об ошибке. –