首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android MediaPlayer流错误: 100: MEDIA_ERROR_SERVER_DIED

Android MediaPlayer流错误: 100: MEDIA_ERROR_SERVER_DIED
EN

Stack Overflow用户
提问于 2013-11-08 22:12:58
回答 1查看 9.4K关注 0票数 5

我开发了一个应用程序,它利用了本地安卓的MediaPlayer。我们班使用媒体播放器的源代码如下所示。

问题是,只有在一些设备上,经过几毫秒的回放(我只听到声音,屏幕仍然是黑色的),我一直得到error(100,0),根据文档的说法

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

在论坛上我发现每次我都需要重新设置玩家.但我只过了一会儿就明白了,然后它就永远消失了。我不能每秒钟重置播放器,因为播放是无用的。我不明白为什么有些设备有这个问题,而另一些则没有。我所知道的是Android操作系统> 4.0。

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

代码语言:javascript
运行
复制
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);
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2014-04-28 13:31:09

我也有同样的问题(错误100,mediaplayer死亡,等等)。我使用.stopPlayback()解析它,然后再次启动流。下面是我的部分代码:

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19869473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档