Das Problem ist, dass ich nur auf einigen Geräten nach einigen Millisekunden der Wiedergabe (ich höre nur Stimme, der Bildschirm bleibt schwarz) immer wieder die Fehlermeldung (100,0) erhalte, die laut Dokumentation lautet
Code: Select all
public static final int MEDIA_ERROR_SERVER_DIEDIn Foren habe ich herausgefunden, dass ich den Player jedes Mal zurücksetzen muss, wenn ich ihn bekomme ... aber ich bekomme ihn schon nach einem kurzen Moment und dann stirbt er für immer. Ich kann den Player nicht jede Sekunde zurücksetzen, da die Wiedergabe nutzlos ist. Ich verstehe nicht, warum manche Geräte dieses Problem haben und andere nicht. Der, den ich kenne, hat Android OS > 4.0.
Natürlich werden zuerst init() und dann showVideo() aufgerufen. Anschließend wird der letzte onError mit Code 100 aufgerufen. Was ist eine mögliche Lösung, damit die Streams kontinuierlich laufen und nicht unterbrochen werden?
Code: Select all
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);
}
}
}
Mobile version