Android MediaPlayer Streaming Error: 100: MEDIA_ERROR_SERVER_DIEDAndroid

Forum für diejenigen, die für Android programmieren
Anonymous
 Android MediaPlayer Streaming Error: 100: MEDIA_ERROR_SERVER_DIED

Post by Anonymous »

Ich habe eine App entwickelt, die den nativen MediaPlayer von Android nutzt. Der Quellcode meiner Klasse, die den Media Player verwendet, ist unten aufgeführt.
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_DIED
Medienserver ist gestorben. In diesem Fall muss die Anwendung das MediaPlayer-Objekt freigeben und ein neues instanziieren.

In 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);
}
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post