Android MediaPlayer 流错误:100:MEDIA_ERROR_SERVER_DIED
Posted
技术标签:
【中文标题】Android MediaPlayer 流错误:100:MEDIA_ERROR_SERVER_DIED【英文标题】:Android MediaPlayer Streaming Error: 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);
【问题讨论】:
【参考方案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 什么替代球员?你能详细说明一下吗?以上是关于Android MediaPlayer 流错误:100:MEDIA_ERROR_SERVER_DIED的主要内容,如果未能解决你的问题,请参考以下文章
在没有 MediaPlayer 的情况下在 android 上播放实时媒体流
Android 的 MediaPlayer 的 m3u8 音频流问题
带有 Cookie 的 Android MediaPlayer URL
在 Android 中是不是可以录制 MediaPlayer 播放的内容?