Use Util method to infer stream type instead of just mime type.

The MediaMetricsListener currently just looks at the mime type and
doesn't use the inference based on the URI if no mime type is set.

Also change default type to OTHER to avoid classifying streams from
URLs without clear file extension as progressive.

PiperOrigin-RevId: 422373381
This commit is contained in:
tonihei 2022-01-17 16:46:47 +00:00 committed by Ian Baker
parent 9f2f33657f
commit 005d8560b7

View File

@ -40,11 +40,11 @@ import android.util.Pair;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.media3.common.C; import androidx.media3.common.C;
import androidx.media3.common.C.ContentType;
import androidx.media3.common.DrmInitData; import androidx.media3.common.DrmInitData;
import androidx.media3.common.Format; import androidx.media3.common.Format;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import androidx.media3.common.MediaLibraryInfo; import androidx.media3.common.MediaLibraryInfo;
import androidx.media3.common.MimeTypes;
import androidx.media3.common.ParserException; import androidx.media3.common.ParserException;
import androidx.media3.common.PlaybackException; import androidx.media3.common.PlaybackException;
import androidx.media3.common.Player; import androidx.media3.common.Player;
@ -638,19 +638,23 @@ public final class MediaMetricsListener
} }
private static int getStreamType(MediaItem mediaItem) { private static int getStreamType(MediaItem mediaItem) {
if (mediaItem.localConfiguration == null || mediaItem.localConfiguration.mimeType == null) { if (mediaItem.localConfiguration == null) {
return PlaybackMetrics.STREAM_TYPE_UNKNOWN; return PlaybackMetrics.STREAM_TYPE_UNKNOWN;
} }
String mimeType = mediaItem.localConfiguration.mimeType; @ContentType
switch (mimeType) { int contentType =
case MimeTypes.APPLICATION_M3U8: Util.inferContentTypeForUriAndMimeType(
mediaItem.localConfiguration.uri, mediaItem.localConfiguration.mimeType);
switch (contentType) {
case C.TYPE_HLS:
return PlaybackMetrics.STREAM_TYPE_HLS; return PlaybackMetrics.STREAM_TYPE_HLS;
case MimeTypes.APPLICATION_MPD: case C.TYPE_DASH:
return PlaybackMetrics.STREAM_TYPE_DASH; return PlaybackMetrics.STREAM_TYPE_DASH;
case MimeTypes.APPLICATION_SS: case C.TYPE_SS:
return PlaybackMetrics.STREAM_TYPE_SS; return PlaybackMetrics.STREAM_TYPE_SS;
case C.TYPE_RTSP:
default: default:
return PlaybackMetrics.STREAM_TYPE_PROGRESSIVE; return PlaybackMetrics.STREAM_TYPE_OTHER;
} }
} }