builder.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
// try the request
Response response = null;
int tryCount = 1;
while (tryCount <= MAX_TRY_COUNT) {
try {
response = chain.proceed(request);
break;
} catch (Exception e) {
if (!NetworkUtils.isNetworkAvailable()) {
// if no internet, dont bother retrying request
throw e;
}
if ("Canceled".equalsIgnoreCase(e.getMessage())) {
// Request canceled, do not retry
throw e;
}
if (tryCount >= MAX_TRY_COUNT) {
// max retry count reached, giving up
throw e;
}
try {
// sleep delay * try count (e.g. 1st retry after 3000ms, 2nd after 6000ms, etc.)
Thread.sleep(RETRY_BACKOFF_DELAY * tryCount);
} catch (InterruptedException e1) {
throw new RuntimeException(e1);
}
tryCount++;
}
}
// otherwise just pass the original response on
return response;
}
});
未显示该视频。我可以听音频,但视频没有播放。我正在使用ExoPlayer
中的Exoplayer
。我只能看到黑屏并听音频。我无法跟踪问题。我正在Recyclerview
播放HLS
视频。
答案 0 :(得分:0)
几天前我也遇到了同样的问题,现在将其发布在这里,这样可以使某人的生活变得轻松,因为当我们在RecyclerView中使用Exoplayer时,这个问题经常出现。
问题原因(就我而言):
每次进入屏幕时,PlayerView都会发生变化(由于存在RecyclerView)
我通过在showLivePlayer()方法内的PlayerView 对象上每次设置 player 来处理它,每次启用回收器视图的屏幕打开播放视频时都会调用该方法。
public void showLivePlayer(PlayerView playerView, String videoURL, String tokenURL, ProgressBar progressBar){
mPlayerView = playerView;
if(player != null)
mPlayerView.setPlayer(player); //THIS IS THE FIX
mProgressBar = progressBar;
//register event bus
if (!EventBus.getDefault().isRegistered(this))
EventBus.getDefault().register(this);
shouldAutoPlay = true;
bandwidthMeter = new DefaultBandwidthMeter();
mediaDataSourceFactory = new DefaultDataSourceFactory(mContext,
Util.getUserAgent(mContext, mContext.getString(R.string.app_name)), bandwidthMeter);
window = new Timeline.Window();
getLiveVideoToken(tokenURL, videoURL);
}
答案 1 :(得分:0)
我不好的是我使用的是PlayerControlView而不是PlayerView