Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跳过Exoplayer Android中丢失的片段_Android_Exoplayer2.x - Fatal编程技术网

跳过Exoplayer Android中丢失的片段

跳过Exoplayer Android中丢失的片段,android,exoplayer2.x,Android,Exoplayer2.x,我有一个通过Exoplayer播放的实时短跑流。由于某些信号或接收问题,我可能会在直播时丢失某些片段。我还提供了一个自定义错误策略,用于对丢失的段重试3次。所以目前,如果段丢失,exoplayer将重试3次,并停止抛出404或410源错误。 与其抛出错误并停止,我希望它跳过该段并请求下一段。如何使用exoplayer实现这一点?通常,仪表板块大小约为4秒。 因此,如果我们在发生错误时考虑到这一假设(而不是403错误代码),您可以尝试这一行: player.seekTo(player.getCur

我有一个通过Exoplayer播放的实时短跑流。由于某些信号或接收问题,我可能会在直播时丢失某些片段。我还提供了一个自定义错误策略,用于对丢失的段重试3次。所以目前,如果段丢失,exoplayer将重试3次,并停止抛出404或410源错误。
与其抛出错误并停止,我希望它跳过该段并请求下一段。如何使用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时。段大小取决于打包机输出,硬编码寻道位置将导致其他错误,如播放时位置非常靠近活动边缘。