Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
fff3f99f
authored
May 04, 2020
by
aquilescanta
Committed by
Oliver Woodman
May 05, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Pass LoadErrorInfo to LoadErrorHandlingPolcy
Issue: #7309 PiperOrigin-RevId: 309749566
parent
862a6e4d
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
168 additions
and
115 deletions
library/core/src/main/java/com/google/android/exoplayer2/source/MediaLoadData.java
library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java
library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaPeriod.java
library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java
library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java
library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java
library/core/src/main/java/com/google/android/exoplayer2/source/MediaLoadData.java
View file @
fff3f99f
...
...
@@ -55,22 +55,28 @@ public final class MediaLoadData {
*/
public
final
long
mediaEndTimeMs
;
/** Creates an instance with the given {@link #dataType}. */
public
MediaLoadData
(
int
dataType
)
{
this
(
dataType
,
/* trackType= */
C
.
TRACK_TYPE_UNKNOWN
,
/* trackFormat= */
null
,
/* trackSelectionReason= */
C
.
SELECTION_REASON_UNKNOWN
,
/* trackSelectionData= */
null
,
/* mediaStartTimeMs= */
C
.
TIME_UNSET
,
/* mediaEndTimeMs= */
C
.
TIME_UNSET
);
}
/**
* Creates media load data.
*
* @param dataType One of the {@link C} {@code DATA_TYPE_*} constants defining the type of data.
* @param trackType One of the {@link C} {@code TRACK_TYPE_*} constants if the data corresponds to
* media of a specific type. {@link C#TRACK_TYPE_UNKNOWN} otherwise.
* @param trackFormat The format of the track to which the data belongs. Null if the data does not
* belong to a track.
* @param trackSelectionReason One of the {@link C} {@code SELECTION_REASON_*} constants if the
* data belongs to a track. {@link C#SELECTION_REASON_UNKNOWN} otherwise.
* @param trackSelectionData Optional data associated with the selection of the track to which the
* data belongs. Null if the data does not belong to a track.
* @param mediaStartTimeMs The start time of the media, or {@link C#TIME_UNSET} if the data does
* not belong to a specific media period.
* @param mediaEndTimeMs The end time of the media, or {@link C#TIME_UNSET} if the data does not
* belong to a specific media period or the end time is unknown.
* @param dataType See {@link #dataType}.
* @param trackType See {@link #trackType}.
* @param trackFormat See {@link #trackFormat}.
* @param trackSelectionReason See {@link #trackSelectionReason}.
* @param trackSelectionData See {@link #trackSelectionData}.
* @param mediaStartTimeMs See {@link #mediaStartTimeMs}.
* @param mediaEndTimeMs See {@link #mediaEndTimeMs}.
*/
public
MediaLoadData
(
int
dataType
,
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java
View file @
fff3f99f
...
...
@@ -41,6 +41,7 @@ import com.google.android.exoplayer2.upstream.Allocator;
import
com.google.android.exoplayer2.upstream.DataSource
;
import
com.google.android.exoplayer2.upstream.DataSpec
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy.LoadErrorInfo
;
import
com.google.android.exoplayer2.upstream.Loader
;
import
com.google.android.exoplayer2.upstream.Loader.LoadErrorAction
;
import
com.google.android.exoplayer2.upstream.Loader.Loadable
;
...
...
@@ -620,9 +621,29 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
IOException
error
,
int
errorCount
)
{
copyLengthFromLoader
(
loadable
);
StatsDataSource
dataSource
=
loadable
.
dataSource
;
LoadEventInfo
loadEventInfo
=
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
dataSource
.
getLastOpenedUri
(),
dataSource
.
getLastResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
dataSource
.
getBytesRead
());
MediaLoadData
mediaLoadData
=
new
MediaLoadData
(
C
.
DATA_TYPE_MEDIA
,
C
.
TRACK_TYPE_UNKNOWN
,
/* trackFormat= */
null
,
C
.
SELECTION_REASON_UNKNOWN
,
/* trackSelectionData= */
null
,
/* mediaStartTimeMs= */
C
.
usToMs
(
loadable
.
seekTimeUs
),
C
.
usToMs
(
durationUs
));
LoadErrorAction
loadErrorAction
;
long
retryDelayMs
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
dataType
,
loadDurationMs
,
error
,
errorCount
);
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
new
LoadErrorInfo
(
loadEventInfo
,
mediaLoadData
,
error
,
errorCount
));
if
(
retryDelayMs
==
C
.
TIME_UNSET
)
{
loadErrorAction
=
Loader
.
DONT_RETRY_FATAL
;
}
else
/* the load should be retried */
{
...
...
@@ -634,17 +655,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
:
Loader
.
DONT_RETRY
;
}
StatsDataSource
dataSource
=
loadable
.
dataSource
;
boolean
wasCanceled
=
!
loadErrorAction
.
isRetry
();
eventDispatcher
.
loadError
(
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
dataSource
.
getLastOpenedUri
(),
dataSource
.
getLastResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
dataSource
.
getBytesRead
()),
loadEventInfo
,
C
.
DATA_TYPE_MEDIA
,
C
.
TRACK_TYPE_UNKNOWN
,
/* trackFormat= */
null
,
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/SingleSampleMediaPeriod.java
View file @
fff3f99f
...
...
@@ -26,6 +26,7 @@ import com.google.android.exoplayer2.trackselection.TrackSelection;
import
com.google.android.exoplayer2.upstream.DataSource
;
import
com.google.android.exoplayer2.upstream.DataSpec
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy.LoadErrorInfo
;
import
com.google.android.exoplayer2.upstream.Loader
;
import
com.google.android.exoplayer2.upstream.Loader.LoadErrorAction
;
import
com.google.android.exoplayer2.upstream.Loader.Loadable
;
...
...
@@ -271,9 +272,28 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
long
loadDurationMs
,
IOException
error
,
int
errorCount
)
{
StatsDataSource
dataSource
=
loadable
.
dataSource
;
LoadEventInfo
loadEventInfo
=
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
dataSource
.
getLastOpenedUri
(),
dataSource
.
getLastResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
dataSource
.
getBytesRead
());
MediaLoadData
mediaLoadData
=
new
MediaLoadData
(
C
.
DATA_TYPE_MEDIA
,
C
.
TRACK_TYPE_UNKNOWN
,
format
,
C
.
SELECTION_REASON_UNKNOWN
,
/* trackSelectionData= */
null
,
/* mediaStartTimeMs= */
0
,
C
.
usToMs
(
durationUs
));
long
retryDelay
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
C
.
DATA_TYPE_MEDIA
,
loadDurationMs
,
error
,
errorCount
);
new
LoadErrorInfo
(
loadEventInfo
,
mediaLoadData
,
error
,
errorCount
)
);
boolean
errorCanBePropagated
=
retryDelay
==
C
.
TIME_UNSET
||
errorCount
...
...
@@ -289,17 +309,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
?
Loader
.
createRetryAction
(
/* resetErrorCount= */
false
,
retryDelay
)
:
Loader
.
DONT_RETRY_FATAL
;
}
StatsDataSource
dataSource
=
loadable
.
dataSource
;
boolean
wasCanceled
=
!
action
.
isRetry
();
eventDispatcher
.
loadError
(
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
dataSource
.
getLastOpenedUri
(),
dataSource
.
getLastResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
dataSource
.
getBytesRead
()),
loadEventInfo
,
C
.
DATA_TYPE_MEDIA
,
C
.
TRACK_TYPE_UNKNOWN
,
format
,
...
...
library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java
View file @
fff3f99f
...
...
@@ -25,12 +25,14 @@ import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
import
com.google.android.exoplayer2.drm.DrmSession
;
import
com.google.android.exoplayer2.drm.DrmSessionManager
;
import
com.google.android.exoplayer2.source.LoadEventInfo
;
import
com.google.android.exoplayer2.source.MediaLoadData
;
import
com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher
;
import
com.google.android.exoplayer2.source.SampleQueue
;
import
com.google.android.exoplayer2.source.SampleStream
;
import
com.google.android.exoplayer2.source.SequenceableLoader
;
import
com.google.android.exoplayer2.upstream.Allocator
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy.LoadErrorInfo
;
import
com.google.android.exoplayer2.upstream.Loader
;
import
com.google.android.exoplayer2.upstream.Loader.LoadErrorAction
;
import
com.google.android.exoplayer2.util.Assertions
;
...
...
@@ -470,10 +472,30 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
int
lastChunkIndex
=
mediaChunks
.
size
()
-
1
;
boolean
cancelable
=
bytesLoaded
==
0
||
!
isMediaChunk
||
!
haveReadFromMediaChunk
(
lastChunkIndex
);
LoadEventInfo
loadEventInfo
=
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
loadable
.
getUri
(),
loadable
.
getResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
bytesLoaded
);
MediaLoadData
mediaLoadData
=
new
MediaLoadData
(
loadable
.
type
,
primaryTrackType
,
loadable
.
trackFormat
,
loadable
.
trackSelectionReason
,
loadable
.
trackSelectionData
,
C
.
usToMs
(
loadable
.
startTimeUs
),
C
.
usToMs
(
loadable
.
endTimeUs
));
LoadErrorInfo
loadErrorInfo
=
new
LoadErrorInfo
(
loadEventInfo
,
mediaLoadData
,
error
,
errorCount
);
long
blacklistDurationMs
=
cancelable
?
loadErrorHandlingPolicy
.
getBlacklistDurationMsFor
(
loadable
.
type
,
loadDurationMs
,
error
,
errorCount
)
?
loadErrorHandlingPolicy
.
getBlacklistDurationMsFor
(
loadErrorInfo
)
:
C
.
TIME_UNSET
;
@Nullable
LoadErrorAction
loadErrorAction
=
null
;
if
(
chunkSource
.
onChunkLoadError
(
loadable
,
cancelable
,
error
,
blacklistDurationMs
))
{
...
...
@@ -493,9 +515,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
if
(
loadErrorAction
==
null
)
{
// The load was not cancelled. Either the load must be retried or the error propagated.
long
retryDelayMs
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
loadable
.
type
,
loadDurationMs
,
error
,
errorCount
);
long
retryDelayMs
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
loadErrorInfo
);
loadErrorAction
=
retryDelayMs
!=
C
.
TIME_UNSET
?
Loader
.
createRetryAction
(
/* resetErrorCount= */
false
,
retryDelayMs
)
...
...
@@ -504,14 +524,7 @@ public class ChunkSampleStream<T extends ChunkSource> implements SampleStream, S
boolean
canceled
=
!
loadErrorAction
.
isRetry
();
eventDispatcher
.
loadError
(
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
loadable
.
getUri
(),
loadable
.
getResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
bytesLoaded
),
loadEventInfo
,
loadable
.
type
,
primaryTrackType
,
loadable
.
trackFormat
,
...
...
library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
View file @
fff3f99f
...
...
@@ -34,6 +34,7 @@ import com.google.android.exoplayer2.source.BaseMediaSource;
import
com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory
;
import
com.google.android.exoplayer2.source.DefaultCompositeSequenceableLoaderFactory
;
import
com.google.android.exoplayer2.source.LoadEventInfo
;
import
com.google.android.exoplayer2.source.MediaLoadData
;
import
com.google.android.exoplayer2.source.MediaPeriod
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.source.MediaSourceEventListener
;
...
...
@@ -49,6 +50,7 @@ import com.google.android.exoplayer2.upstream.Allocator;
import
com.google.android.exoplayer2.upstream.DataSource
;
import
com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy.LoadErrorInfo
;
import
com.google.android.exoplayer2.upstream.Loader
;
import
com.google.android.exoplayer2.upstream.Loader.LoadErrorAction
;
import
com.google.android.exoplayer2.upstream.LoaderErrorThrower
;
...
...
@@ -852,15 +854,7 @@ public final class DashMediaSource extends BaseMediaSource {
long
loadDurationMs
,
IOException
error
,
int
errorCount
)
{
long
retryDelayMs
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
C
.
DATA_TYPE_MANIFEST
,
loadDurationMs
,
error
,
errorCount
);
LoadErrorAction
loadErrorAction
=
retryDelayMs
==
C
.
TIME_UNSET
?
Loader
.
DONT_RETRY_FATAL
:
Loader
.
createRetryAction
(
/* resetErrorCount= */
false
,
retryDelayMs
);
boolean
wasCanceled
=
!
loadErrorAction
.
isRetry
();
manifestEventDispatcher
.
loadError
(
LoadEventInfo
loadEventInfo
=
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
...
...
@@ -868,10 +862,17 @@ public final class DashMediaSource extends BaseMediaSource {
loadable
.
getResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
loadable
.
bytesLoaded
()),
loadable
.
type
,
error
,
wasCanceled
);
loadable
.
bytesLoaded
());
MediaLoadData
mediaLoadData
=
new
MediaLoadData
(
loadable
.
type
);
LoadErrorInfo
loadErrorInfo
=
new
LoadErrorInfo
(
loadEventInfo
,
mediaLoadData
,
error
,
errorCount
);
long
retryDelayMs
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
loadErrorInfo
);
LoadErrorAction
loadErrorAction
=
retryDelayMs
==
C
.
TIME_UNSET
?
Loader
.
DONT_RETRY_FATAL
:
Loader
.
createRetryAction
(
/* resetErrorCount= */
false
,
retryDelayMs
);
boolean
wasCanceled
=
!
loadErrorAction
.
isRetry
();
manifestEventDispatcher
.
loadError
(
loadEventInfo
,
loadable
.
type
,
error
,
wasCanceled
);
if
(
wasCanceled
)
{
loadErrorHandlingPolicy
.
onLoadTaskConcluded
(
loadable
.
loadTaskId
);
}
...
...
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java
View file @
fff3f99f
...
...
@@ -38,6 +38,7 @@ import com.google.android.exoplayer2.metadata.emsg.EventMessage;
import
com.google.android.exoplayer2.metadata.emsg.EventMessageDecoder
;
import
com.google.android.exoplayer2.metadata.id3.PrivFrame
;
import
com.google.android.exoplayer2.source.LoadEventInfo
;
import
com.google.android.exoplayer2.source.MediaLoadData
;
import
com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher
;
import
com.google.android.exoplayer2.source.SampleQueue
;
import
com.google.android.exoplayer2.source.SampleQueue.UpstreamFormatChangedListener
;
...
...
@@ -51,6 +52,7 @@ import com.google.android.exoplayer2.trackselection.TrackSelection;
import
com.google.android.exoplayer2.upstream.Allocator
;
import
com.google.android.exoplayer2.upstream.DataReader
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy.LoadErrorInfo
;
import
com.google.android.exoplayer2.upstream.Loader
;
import
com.google.android.exoplayer2.upstream.Loader.LoadErrorAction
;
import
com.google.android.exoplayer2.util.Assertions
;
...
...
@@ -768,11 +770,28 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
long
bytesLoaded
=
loadable
.
bytesLoaded
();
boolean
isMediaChunk
=
isMediaChunk
(
loadable
);
boolean
blacklistSucceeded
=
false
;
LoadEventInfo
loadEventInfo
=
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
loadable
.
getUri
(),
loadable
.
getResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
bytesLoaded
);
MediaLoadData
mediaLoadData
=
new
MediaLoadData
(
loadable
.
type
,
trackType
,
loadable
.
trackFormat
,
loadable
.
trackSelectionReason
,
loadable
.
trackSelectionData
,
C
.
usToMs
(
loadable
.
startTimeUs
),
C
.
usToMs
(
loadable
.
endTimeUs
));
LoadErrorInfo
loadErrorInfo
=
new
LoadErrorInfo
(
loadEventInfo
,
mediaLoadData
,
error
,
errorCount
);
LoadErrorAction
loadErrorAction
;
long
blacklistDurationMs
=
loadErrorHandlingPolicy
.
getBlacklistDurationMsFor
(
loadable
.
type
,
loadDurationMs
,
error
,
errorCount
);
long
blacklistDurationMs
=
loadErrorHandlingPolicy
.
getBlacklistDurationMsFor
(
loadErrorInfo
);
if
(
blacklistDurationMs
!=
C
.
TIME_UNSET
)
{
blacklistSucceeded
=
chunkSource
.
maybeBlacklistTrack
(
loadable
,
blacklistDurationMs
);
}
...
...
@@ -787,9 +806,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
}
loadErrorAction
=
Loader
.
DONT_RETRY
;
}
else
/* did not blacklist */
{
long
retryDelayMs
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
loadable
.
type
,
loadDurationMs
,
error
,
errorCount
);
long
retryDelayMs
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
loadErrorInfo
);
loadErrorAction
=
retryDelayMs
!=
C
.
TIME_UNSET
?
Loader
.
createRetryAction
(
/* resetErrorCount= */
false
,
retryDelayMs
)
...
...
@@ -798,14 +815,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
boolean
wasCanceled
=
!
loadErrorAction
.
isRetry
();
eventDispatcher
.
loadError
(
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
loadable
.
getUri
(),
loadable
.
getResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
bytesLoaded
),
loadEventInfo
,
loadable
.
type
,
trackType
,
loadable
.
trackFormat
,
...
...
library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/DefaultHlsPlaylistTracker.java
View file @
fff3f99f
...
...
@@ -22,12 +22,14 @@ import androidx.annotation.Nullable;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.ParserException
;
import
com.google.android.exoplayer2.source.LoadEventInfo
;
import
com.google.android.exoplayer2.source.MediaLoadData
;
import
com.google.android.exoplayer2.source.MediaSourceEventListener.EventDispatcher
;
import
com.google.android.exoplayer2.source.hls.HlsDataSourceFactory
;
import
com.google.android.exoplayer2.source.hls.playlist.HlsMasterPlaylist.Variant
;
import
com.google.android.exoplayer2.source.hls.playlist.HlsMediaPlaylist.Segment
;
import
com.google.android.exoplayer2.upstream.DataSource
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy.LoadErrorInfo
;
import
com.google.android.exoplayer2.upstream.Loader
;
import
com.google.android.exoplayer2.upstream.Loader.LoadErrorAction
;
import
com.google.android.exoplayer2.upstream.ParsingLoadable
;
...
...
@@ -281,11 +283,7 @@ public final class DefaultHlsPlaylistTracker
long
loadDurationMs
,
IOException
error
,
int
errorCount
)
{
long
retryDelayMs
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
loadable
.
type
,
loadDurationMs
,
error
,
errorCount
);
boolean
isFatal
=
retryDelayMs
==
C
.
TIME_UNSET
;
eventDispatcher
.
loadError
(
LoadEventInfo
loadEventInfo
=
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
...
...
@@ -293,10 +291,13 @@ public final class DefaultHlsPlaylistTracker
loadable
.
getResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
loadable
.
bytesLoaded
()),
C
.
DATA_TYPE_MANIFEST
,
error
,
isFatal
);
loadable
.
bytesLoaded
());
MediaLoadData
mediaLoadData
=
new
MediaLoadData
(
loadable
.
type
);
long
retryDelayMs
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
new
LoadErrorInfo
(
loadEventInfo
,
mediaLoadData
,
error
,
errorCount
));
boolean
isFatal
=
retryDelayMs
==
C
.
TIME_UNSET
;
eventDispatcher
.
loadError
(
loadEventInfo
,
loadable
.
type
,
error
,
isFatal
);
if
(
isFatal
)
{
loadErrorHandlingPolicy
.
onLoadTaskConcluded
(
loadable
.
loadTaskId
);
}
...
...
@@ -576,11 +577,20 @@ public final class DefaultHlsPlaylistTracker
long
loadDurationMs
,
IOException
error
,
int
errorCount
)
{
LoadEventInfo
loadEventInfo
=
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
loadable
.
getUri
(),
loadable
.
getResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
loadable
.
bytesLoaded
());
MediaLoadData
mediaLoadData
=
new
MediaLoadData
(
loadable
.
type
);
LoadErrorInfo
loadErrorInfo
=
new
LoadErrorInfo
(
loadEventInfo
,
mediaLoadData
,
error
,
errorCount
);
LoadErrorAction
loadErrorAction
;
long
blacklistDurationMs
=
loadErrorHandlingPolicy
.
getBlacklistDurationMsFor
(
loadable
.
type
,
loadDurationMs
,
error
,
errorCount
);
long
blacklistDurationMs
=
loadErrorHandlingPolicy
.
getBlacklistDurationMsFor
(
loadErrorInfo
);
boolean
shouldBlacklist
=
blacklistDurationMs
!=
C
.
TIME_UNSET
;
boolean
blacklistingFailed
=
...
...
@@ -590,9 +600,7 @@ public final class DefaultHlsPlaylistTracker
}
if
(
blacklistingFailed
)
{
long
retryDelay
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
loadable
.
type
,
loadDurationMs
,
error
,
errorCount
);
long
retryDelay
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
loadErrorInfo
);
loadErrorAction
=
retryDelay
!=
C
.
TIME_UNSET
?
Loader
.
createRetryAction
(
false
,
retryDelay
)
...
...
@@ -602,18 +610,7 @@ public final class DefaultHlsPlaylistTracker
}
boolean
wasCanceled
=
!
loadErrorAction
.
isRetry
();
eventDispatcher
.
loadError
(
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
loadable
.
getUri
(),
loadable
.
getResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
loadable
.
bytesLoaded
()),
C
.
DATA_TYPE_MANIFEST
,
error
,
wasCanceled
);
eventDispatcher
.
loadError
(
loadEventInfo
,
loadable
.
type
,
error
,
wasCanceled
);
if
(
wasCanceled
)
{
loadErrorHandlingPolicy
.
onLoadTaskConcluded
(
loadable
.
loadTaskId
);
}
...
...
library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java
View file @
fff3f99f
...
...
@@ -31,6 +31,7 @@ import com.google.android.exoplayer2.source.BaseMediaSource;
import
com.google.android.exoplayer2.source.CompositeSequenceableLoaderFactory
;
import
com.google.android.exoplayer2.source.DefaultCompositeSequenceableLoaderFactory
;
import
com.google.android.exoplayer2.source.LoadEventInfo
;
import
com.google.android.exoplayer2.source.MediaLoadData
;
import
com.google.android.exoplayer2.source.MediaPeriod
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.source.MediaSourceEventListener
;
...
...
@@ -46,6 +47,7 @@ import com.google.android.exoplayer2.upstream.Allocator;
import
com.google.android.exoplayer2.upstream.DataSource
;
import
com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy
;
import
com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy.LoadErrorInfo
;
import
com.google.android.exoplayer2.upstream.Loader
;
import
com.google.android.exoplayer2.upstream.Loader.LoadErrorAction
;
import
com.google.android.exoplayer2.upstream.LoaderErrorThrower
;
...
...
@@ -664,15 +666,7 @@ public final class SsMediaSource extends BaseMediaSource
long
loadDurationMs
,
IOException
error
,
int
errorCount
)
{
long
retryDelayMs
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
C
.
DATA_TYPE_MANIFEST
,
loadDurationMs
,
error
,
errorCount
);
LoadErrorAction
loadErrorAction
=
retryDelayMs
==
C
.
TIME_UNSET
?
Loader
.
DONT_RETRY_FATAL
:
Loader
.
createRetryAction
(
/* resetErrorCount= */
false
,
retryDelayMs
);
boolean
wasCanceled
=
!
loadErrorAction
.
isRetry
();
manifestEventDispatcher
.
loadError
(
LoadEventInfo
loadEventInfo
=
new
LoadEventInfo
(
loadable
.
loadTaskId
,
loadable
.
dataSpec
,
...
...
@@ -680,10 +674,17 @@ public final class SsMediaSource extends BaseMediaSource
loadable
.
getResponseHeaders
(),
elapsedRealtimeMs
,
loadDurationMs
,
loadable
.
bytesLoaded
()),
loadable
.
type
,
error
,
wasCanceled
);
loadable
.
bytesLoaded
());
MediaLoadData
mediaLoadData
=
new
MediaLoadData
(
loadable
.
type
);
long
retryDelayMs
=
loadErrorHandlingPolicy
.
getRetryDelayMsFor
(
new
LoadErrorInfo
(
loadEventInfo
,
mediaLoadData
,
error
,
errorCount
));
LoadErrorAction
loadErrorAction
=
retryDelayMs
==
C
.
TIME_UNSET
?
Loader
.
DONT_RETRY_FATAL
:
Loader
.
createRetryAction
(
/* resetErrorCount= */
false
,
retryDelayMs
);
boolean
wasCanceled
=
!
loadErrorAction
.
isRetry
();
manifestEventDispatcher
.
loadError
(
loadEventInfo
,
loadable
.
type
,
error
,
wasCanceled
);
if
(
wasCanceled
)
{
loadErrorHandlingPolicy
.
onLoadTaskConcluded
(
loadable
.
loadTaskId
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment