跳过Exoplayer Android中丢失的片段
我有一个通过Exoplayer播放的实时短跑流。由于某些信号或接收问题,我可能会在直播时丢失某些片段。我还提供了一个自定义错误策略,用于对丢失的段重试3次。所以目前,如果段丢失,exoplayer将重试3次,并停止抛出404或410源错误。跳过Exoplayer Android中丢失的片段,android,exoplayer2.x,Android,Exoplayer2.x,我有一个通过Exoplayer播放的实时短跑流。由于某些信号或接收问题,我可能会在直播时丢失某些片段。我还提供了一个自定义错误策略,用于对丢失的段重试3次。所以目前,如果段丢失,exoplayer将重试3次,并停止抛出404或410源错误。 与其抛出错误并停止,我希望它跳过该段并请求下一段。如何使用exoplayer实现这一点?通常,仪表板块大小约为4秒。 因此,如果我们在发生错误时考虑到这一假设(而不是403错误代码),您可以尝试这一行: player.seekTo(player.getCur
与其抛出错误并停止,我希望它跳过该段并请求下一段。如何使用exoplayer实现这一点?通常,仪表板块大小约为4秒。 因此,如果我们在发生错误时考虑到这一假设(而不是403错误代码),您可以尝试这一行:
player.seekTo(player.getCurrentPosition() + 4000)
通常,破折号块大小约为4秒。 因此,如果我们在发生错误时考虑到这一假设(而不是403错误代码),您可以尝试这一行:
player.seekTo(player.getCurrentPosition() + 4000)
我可能会为您提供一些解决方案,但我还没有针对各种用例对其进行测试 重写ChunkSampleStream中的onLoadError函数以返回成功,即使该段失败。ExoPope会认为这是成功并移动到下一个块。当播放位置达到该点时,它将其视为不连续,并在片段持续时间内暂停,然后继续播放
public LoadErrorAction onLoadError(
Chunk loadable,
long elapsedRealtimeMs,
long loadDurationMs,
IOException error,
int errorCount) {
if(errorCount > 3 // you can put any retry limit here ){
chunkSource.onChunkLoadCompleted(loadable);
eventDispatcher.loadCompleted(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
loadable.type,
primaryTrackType,
loadable.trackFormat,
loadable.trackSelectionReason,
loadable.trackSelectionData,
loadable.startTimeUs,
loadable.endTimeUs,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
callback.onContinueLoadingRequested(this);
LoadErrorAction loadErrorAction = null;
loadErrorAction = Loader.DONT_RETRY;
return loadErrorAction;
}else{
the rest of the function should be pasted here
}
希望能有帮助
即使我在这个问题上被困了几个小时我可能会为您提供一些解决方案,但我还没有针对各种用例对其进行测试 重写ChunkSampleStream中的onLoadError函数以返回成功,即使该段失败。ExoPope会认为这是成功并移动到下一个块。当播放位置达到该点时,它将其视为不连续,并在片段持续时间内暂停,然后继续播放
public LoadErrorAction onLoadError(
Chunk loadable,
long elapsedRealtimeMs,
long loadDurationMs,
IOException error,
int errorCount) {
if(errorCount > 3 // you can put any retry limit here ){
chunkSource.onChunkLoadCompleted(loadable);
eventDispatcher.loadCompleted(
loadable.dataSpec,
loadable.getUri(),
loadable.getResponseHeaders(),
loadable.type,
primaryTrackType,
loadable.trackFormat,
loadable.trackSelectionReason,
loadable.trackSelectionData,
loadable.startTimeUs,
loadable.endTimeUs,
elapsedRealtimeMs,
loadDurationMs,
loadable.bytesLoaded());
callback.onContinueLoadingRequested(this);
LoadErrorAction loadErrorAction = null;
loadErrorAction = Loader.DONT_RETRY;
return loadErrorAction;
}else{
the rest of the function should be pasted here
}
希望能有帮助
就连我也被这个问题困扰了几个小时段大小取决于打包机输出,硬编码寻道位置将导致其他错误,如播放位置非常接近live-edge时。段大小取决于打包机输出,硬编码寻道位置将导致其他错误,如播放时位置非常靠近活动边缘。