【问题标题】:Android MediaPlayer Streaming Error: 100: MEDIA_ERROR_SERVER_DIEDAndroid MediaPlayer 流错误:100:MEDIA_ERROR_SERVER_DIED
【发布时间】:2013-11-21 01:52:00
【问题描述】:

我开发了一个利用原生 Android 的 MediaPlayer 的应用程序。我的班级使用媒体播放器的源代码如下。

问题是,只有在某些设备上播放几毫秒后(我只听到声音,屏幕保持黑色),我不断收到error(100,0),根据documentation 所说

public static final int MEDIA_ERROR_SERVER_DIED

媒体服务器死机。在这种情况下,应用程序必须释放 MediaPlayer 对象并实例化一个新对象。

在论坛上,我发现每次获得播放器时都需要重置播放器……但我在短短片刻后就获得了它,然后它就永远死了。我不能每秒都重置播放器,因为播放没用。我不明白为什么有些设备有这个问题而其他设备没有。我知道的有 Android OS > 4.0。

当然,首先是init(),然后是showVideo()。然后调用代码为 100 的最后一个 onError。使流连续运行而不中断的潜在解决方案是什么?

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

【问题讨论】:

    标签: android stream android-mediaplayer media


    【解决方案1】:

    我遇到了同样的问题(错误 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;
                }
            });
        }
    

    在练习中,看起来视频只是变慢了

    【讨论】:

    • 感谢您的反馈 :) 很抱歉,但我这里有一台华为设备显示错误 100,没有任何帮助它玩 HLS,只是切换到替代播放器解决了问题 :(
    • 如果解决方案不起作用并且重新启动视频导致再次出现 100,您将进入启动和停止视频的循环。
    • @Kim 我添加了重试次数,如果再次失败,我尝试了 2 次,我显示错误消息。
    • @basta 什么替代球员?你能详细说明一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多