播放视频时如何跳过 android 中丢失的块?
How to skip missing chunks in android when playing video?
我正在编写一个 android 应用程序,它接受 HLS
并通过 VideoView
显示。但有时流中缺少块,我的播放器崩溃了。这是我尝试修复它的方法。
player.setOnErrorListener(playerErrorHandler);
private class PlayerErrorHandler implements MediaPlayer.OnErrorListener {
private boolean handledError = false;
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
if (!handledError) {
if (!isOnline()) {
finish();
}
//if we're here then we have a missing chunk
int currentPosition = mp.getCurrentPosition();
// check if seekForward time is lesser than song duration
mp.seekTo(currentPosition + 10);
} else {
handledError = false;
}
return true;
}
}
private boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}
因此,如果我的连接没有任何问题,我只是检查错误,如果一切正常,这意味着我的流中缺少块。但问题是,我的转发不起作用,并且不断抛出错误。我如何转发 10 秒?或者更好,有没有办法告诉媒体播放器自动跳过丢失的块并继续播放?
通过反复试验找到了正确的方法。这是我如何跳过丢失的块
更改了这些行
int currentPosition = mp.getCurrentPosition();
mp.seekTo(currentPosition + 10);
这些
int currentPosition = mp.getCurrentPosition();
player.setVideoPath(streamUrl);
player.seekTo(currentPosition + 5000);
player.start();
我正在编写一个 android 应用程序,它接受 HLS
并通过 VideoView
显示。但有时流中缺少块,我的播放器崩溃了。这是我尝试修复它的方法。
player.setOnErrorListener(playerErrorHandler);
private class PlayerErrorHandler implements MediaPlayer.OnErrorListener {
private boolean handledError = false;
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
if (!handledError) {
if (!isOnline()) {
finish();
}
//if we're here then we have a missing chunk
int currentPosition = mp.getCurrentPosition();
// check if seekForward time is lesser than song duration
mp.seekTo(currentPosition + 10);
} else {
handledError = false;
}
return true;
}
}
private boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
return netInfo != null && netInfo.isConnectedOrConnecting();
}
因此,如果我的连接没有任何问题,我只是检查错误,如果一切正常,这意味着我的流中缺少块。但问题是,我的转发不起作用,并且不断抛出错误。我如何转发 10 秒?或者更好,有没有办法告诉媒体播放器自动跳过丢失的块并继续播放?
通过反复试验找到了正确的方法。这是我如何跳过丢失的块
更改了这些行
int currentPosition = mp.getCurrentPosition();
mp.seekTo(currentPosition + 10);
这些
int currentPosition = mp.getCurrentPosition();
player.setVideoPath(streamUrl);
player.seekTo(currentPosition + 5000);
player.start();