HlsDownloader.smali
.class public final Lcom/google/android/exoplayer2/source/hls/offline/HlsDownloader;
.super Lcom/google/android/exoplayer2/offline/SegmentDownloader;
.source "HlsDownloader.java"
# annotations
.annotation system Ldalvik/annotation/Signature;
value = {
"Lcom/google/android/exoplayer2/offline/SegmentDownloader<",
"Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;",
">;"
}
.end annotation
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>(Landroid/net/Uri;Ljava/util/List;Lcom/google/android/exoplayer2/offline/DownloaderConstructorHelper;)V
.registers 4
.param p1, "playlistUri" # Landroid/net/Uri;
.param p3, "constructorHelper" # Lcom/google/android/exoplayer2/offline/DownloaderConstructorHelper;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Landroid/net/Uri;",
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/offline/StreamKey;",
">;",
"Lcom/google/android/exoplayer2/offline/DownloaderConstructorHelper;",
")V"
}
.end annotation
.line 70
.local p2, "streamKeys":Ljava/util/List;, "Ljava/util/List<Lcom/google/android/exoplayer2/offline/StreamKey;>;"
invoke-direct {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/offline/SegmentDownloader;-><init>(Landroid/net/Uri;Ljava/util/List;Lcom/google/android/exoplayer2/offline/DownloaderConstructorHelper;)V
.line 71
return-void
.end method
.method private addMediaPlaylistDataSpecs(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
.registers 7
.param p1, "baseUri" # Ljava/lang/String;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/String;",
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;",
">;",
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/upstream/DataSpec;",
">;)V"
}
.end annotation
.line 123
.local p2, "urls":Ljava/util/List;, "Ljava/util/List<Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;>;"
.local p3, "out":Ljava/util/List;, "Ljava/util/List<Lcom/google/android/exoplayer2/upstream/DataSpec;>;"
const/4 v0, 0x0
.local v0, "i":I
:goto_1
invoke-interface {p2}, Ljava/util/List;->size()I
move-result v1
if-ge v0, v1, :cond_1d
.line 124
invoke-interface {p2, v0}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v1
check-cast v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;
iget-object v1, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist$HlsUrl;->url:Ljava/lang/String;
invoke-static {p1, v1}, Lcom/google/android/exoplayer2/util/UriUtil;->resolveToUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;
move-result-object v1
.line 125
.local v1, "playlistUri":Landroid/net/Uri;
invoke-static {v1}, Lcom/google/android/exoplayer2/offline/SegmentDownloader;->getCompressibleDataSpec(Landroid/net/Uri;)Lcom/google/android/exoplayer2/upstream/DataSpec;
move-result-object v2
invoke-interface {p3, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z
.line 123
.end local v1 # "playlistUri":Landroid/net/Uri;
add-int/lit8 v0, v0, 0x1
goto :goto_1
.line 127
.end local v0 # "i":I
:cond_1d
return-void
.end method
.method private addSegment(Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;Ljava/util/HashSet;Ljava/util/ArrayList;)V
.registers 21
.param p1, "mediaPlaylist" # Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;
.param p2, "segment" # Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;",
"Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;",
"Ljava/util/HashSet<",
"Landroid/net/Uri;",
">;",
"Ljava/util/ArrayList<",
"Lcom/google/android/exoplayer2/offline/SegmentDownloader$Segment;",
">;)V"
}
.end annotation
.line 140
.local p3, "seenEncryptionKeyUris":Ljava/util/HashSet;, "Ljava/util/HashSet<Landroid/net/Uri;>;"
.local p4, "out":Ljava/util/ArrayList;, "Ljava/util/ArrayList<Lcom/google/android/exoplayer2/offline/SegmentDownloader$Segment;>;"
move-object/from16 v0, p1
move-object/from16 v1, p2
move-object/from16 v2, p4
iget-object v3, v0, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->baseUri:Ljava/lang/String;
.line 141
.local v3, "baseUri":Ljava/lang/String;
iget-wide v4, v0, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->startTimeUs:J
iget-wide v6, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->relativeStartTimeUs:J
add-long/2addr v4, v6
.line 142
.local v4, "startTimeUs":J
iget-object v6, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->fullSegmentEncryptionKeyUri:Ljava/lang/String;
if-eqz v6, :cond_2c
.line 143
iget-object v6, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->fullSegmentEncryptionKeyUri:Ljava/lang/String;
invoke-static {v3, v6}, Lcom/google/android/exoplayer2/util/UriUtil;->resolveToUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;
move-result-object v6
.line 144
.local v6, "keyUri":Landroid/net/Uri;
move-object/from16 v7, p3
invoke-virtual {v7, v6}, Ljava/util/HashSet;->add(Ljava/lang/Object;)Z
move-result v8
if-eqz v8, :cond_2e
.line 145
new-instance v8, Lcom/google/android/exoplayer2/offline/SegmentDownloader$Segment;
invoke-static {v6}, Lcom/google/android/exoplayer2/offline/SegmentDownloader;->getCompressibleDataSpec(Landroid/net/Uri;)Lcom/google/android/exoplayer2/upstream/DataSpec;
move-result-object v9
invoke-direct {v8, v4, v5, v9}, Lcom/google/android/exoplayer2/offline/SegmentDownloader$Segment;-><init>(JLcom/google/android/exoplayer2/upstream/DataSpec;)V
invoke-virtual {v2, v8}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
goto :goto_2e
.line 142
.end local v6 # "keyUri":Landroid/net/Uri;
:cond_2c
move-object/from16 v7, p3
.line 148
:cond_2e
:goto_2e
iget-object v6, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->url:Ljava/lang/String;
invoke-static {v3, v6}, Lcom/google/android/exoplayer2/util/UriUtil;->resolveToUri(Ljava/lang/String;Ljava/lang/String;)Landroid/net/Uri;
move-result-object v6
.line 149
.local v6, "segmentUri":Landroid/net/Uri;
new-instance v15, Lcom/google/android/exoplayer2/upstream/DataSpec;
iget-wide v10, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->byterangeOffset:J
iget-wide v12, v1, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->byterangeLength:J
const/4 v14, 0x0
move-object v8, v15
move-object v9, v6
invoke-direct/range {v8 .. v14}, Lcom/google/android/exoplayer2/upstream/DataSpec;-><init>(Landroid/net/Uri;JJLjava/lang/String;)V
.line 151
.local v8, "dataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
new-instance v9, Lcom/google/android/exoplayer2/offline/SegmentDownloader$Segment;
invoke-direct {v9, v4, v5, v8}, Lcom/google/android/exoplayer2/offline/SegmentDownloader$Segment;-><init>(JLcom/google/android/exoplayer2/upstream/DataSpec;)V
invoke-virtual {v2, v9}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 152
return-void
.end method
.method private static loadManifest(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSpec;)Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;
.registers 4
.param p0, "dataSource" # Lcom/google/android/exoplayer2/upstream/DataSource;
.param p1, "dataSpec" # Lcom/google/android/exoplayer2/upstream/DataSpec;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 131
new-instance v0, Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser;
invoke-direct {v0}, Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylistParser;-><init>()V
const/4 v1, 0x4
invoke-static {p0, v0, p1, v1}, Lcom/google/android/exoplayer2/upstream/ParsingLoadable;->load(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/ParsingLoadable$Parser;Lcom/google/android/exoplayer2/upstream/DataSpec;I)Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;
return-object v0
.end method
# virtual methods
.method protected bridge synthetic getManifest(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSpec;)Lcom/google/android/exoplayer2/offline/FilterableManifest;
.registers 3
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 60
invoke-virtual {p0, p1, p2}, Lcom/google/android/exoplayer2/source/hls/offline/HlsDownloader;->getManifest(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSpec;)Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;
move-result-object p1
return-object p1
.end method
.method protected getManifest(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSpec;)Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;
.registers 4
.param p1, "dataSource" # Lcom/google/android/exoplayer2/upstream/DataSource;
.param p2, "dataSpec" # Lcom/google/android/exoplayer2/upstream/DataSpec;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 75
invoke-static {p1, p2}, Lcom/google/android/exoplayer2/source/hls/offline/HlsDownloader;->loadManifest(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSpec;)Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;
move-result-object v0
return-object v0
.end method
.method protected bridge synthetic getSegments(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/offline/FilterableManifest;Z)Ljava/util/List;
.registers 4
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/lang/InterruptedException;,
Ljava/io/IOException;
}
.end annotation
.line 60
check-cast p2, Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;
invoke-virtual {p0, p1, p2, p3}, Lcom/google/android/exoplayer2/source/hls/offline/HlsDownloader;->getSegments(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;Z)Ljava/util/List;
move-result-object p1
return-object p1
.end method
.method protected getSegments(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;Z)Ljava/util/List;
.registers 16
.param p1, "dataSource" # Lcom/google/android/exoplayer2/upstream/DataSource;
.param p2, "playlist" # Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;
.param p3, "allowIncompleteList" # Z
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Lcom/google/android/exoplayer2/upstream/DataSource;",
"Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;",
"Z)",
"Ljava/util/List<",
"Lcom/google/android/exoplayer2/offline/SegmentDownloader$Segment;",
">;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 81
iget-object v0, p2, Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;->baseUri:Ljava/lang/String;
.line 83
.local v0, "baseUri":Ljava/lang/String;
new-instance v1, Ljava/util/ArrayList;
invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V
.line 84
.local v1, "mediaPlaylistDataSpecs":Ljava/util/ArrayList;, "Ljava/util/ArrayList<Lcom/google/android/exoplayer2/upstream/DataSpec;>;"
instance-of v2, p2, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist;
if-eqz v2, :cond_1e
.line 85
move-object v2, p2
check-cast v2, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist;
.line 86
.local v2, "masterPlaylist":Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist;
iget-object v3, v2, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist;->variants:Ljava/util/List;
invoke-direct {p0, v0, v3, v1}, Lcom/google/android/exoplayer2/source/hls/offline/HlsDownloader;->addMediaPlaylistDataSpecs(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
.line 87
iget-object v3, v2, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist;->audios:Ljava/util/List;
invoke-direct {p0, v0, v3, v1}, Lcom/google/android/exoplayer2/source/hls/offline/HlsDownloader;->addMediaPlaylistDataSpecs(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
.line 88
iget-object v3, v2, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist;->subtitles:Ljava/util/List;
invoke-direct {p0, v0, v3, v1}, Lcom/google/android/exoplayer2/source/hls/offline/HlsDownloader;->addMediaPlaylistDataSpecs(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V
.line 89
.end local v2 # "masterPlaylist":Lcom/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist;
goto :goto_29
.line 90
:cond_1e
invoke-static {v0}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
move-result-object v2
invoke-static {v2}, Lcom/google/android/exoplayer2/offline/SegmentDownloader;->getCompressibleDataSpec(Landroid/net/Uri;)Lcom/google/android/exoplayer2/upstream/DataSpec;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 93
:goto_29
new-instance v2, Ljava/util/ArrayList;
invoke-direct {v2}, Ljava/util/ArrayList;-><init>()V
.line 94
.local v2, "segments":Ljava/util/ArrayList;, "Ljava/util/ArrayList<Lcom/google/android/exoplayer2/offline/SegmentDownloader$Segment;>;"
new-instance v3, Ljava/util/HashSet;
invoke-direct {v3}, Ljava/util/HashSet;-><init>()V
.line 95
.local v3, "seenEncryptionKeyUris":Ljava/util/HashSet;, "Ljava/util/HashSet<Landroid/net/Uri;>;"
invoke-virtual {v1}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator;
move-result-object v4
:goto_37
invoke-interface {v4}, Ljava/util/Iterator;->hasNext()Z
move-result v5
if-eqz v5, :cond_7a
invoke-interface {v4}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v5
check-cast v5, Lcom/google/android/exoplayer2/upstream/DataSpec;
.line 96
.local v5, "mediaPlaylistDataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
new-instance v6, Lcom/google/android/exoplayer2/offline/SegmentDownloader$Segment;
const-wide/16 v7, 0x0
invoke-direct {v6, v7, v8, v5}, Lcom/google/android/exoplayer2/offline/SegmentDownloader$Segment;-><init>(JLcom/google/android/exoplayer2/upstream/DataSpec;)V
invoke-virtual {v2, v6}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
.line 99
:try_start_4d
invoke-static {p1, v5}, Lcom/google/android/exoplayer2/source/hls/offline/HlsDownloader;->loadManifest(Lcom/google/android/exoplayer2/upstream/DataSource;Lcom/google/android/exoplayer2/upstream/DataSpec;)Lcom/google/android/exoplayer2/source/hls/playlist/HlsPlaylist;
move-result-object v6
check-cast v6, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;
:try_end_53
.catch Ljava/io/IOException; {:try_start_4d .. :try_end_53} :catch_75
.line 106
.local v6, "mediaPlaylist":Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;
nop
.line 107
const/4 v7, 0x0
.line 108
.local v7, "lastInitSegment":Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;
iget-object v8, v6, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;->segments:Ljava/util/List;
.line 109
.local v8, "hlsSegments":Ljava/util/List;, "Ljava/util/List<Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;>;"
const/4 v9, 0x0
.local v9, "i":I
:goto_58
invoke-interface {v8}, Ljava/util/List;->size()I
move-result v10
if-ge v9, v10, :cond_74
.line 110
invoke-interface {v8, v9}, Ljava/util/List;->get(I)Ljava/lang/Object;
move-result-object v10
check-cast v10, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;
.line 111
.local v10, "segment":Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;
iget-object v11, v10, Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;->initializationSegment:Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;
.line 112
.local v11, "initSegment":Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;
if-eqz v11, :cond_6e
if-eq v11, v7, :cond_6e
.line 113
move-object v7, v11
.line 114
invoke-direct {p0, v6, v11, v3, v2}, Lcom/google/android/exoplayer2/source/hls/offline/HlsDownloader;->addSegment(Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;Ljava/util/HashSet;Ljava/util/ArrayList;)V
.line 116
:cond_6e
invoke-direct {p0, v6, v10, v3, v2}, Lcom/google/android/exoplayer2/source/hls/offline/HlsDownloader;->addSegment(Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;Ljava/util/HashSet;Ljava/util/ArrayList;)V
.line 109
.end local v10 # "segment":Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;
.end local v11 # "initSegment":Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;
add-int/lit8 v9, v9, 0x1
goto :goto_58
.line 118
.end local v5 # "mediaPlaylistDataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
.end local v6 # "mediaPlaylist":Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist;
.end local v7 # "lastInitSegment":Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;
.end local v8 # "hlsSegments":Ljava/util/List;, "Ljava/util/List<Lcom/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist$Segment;>;"
.end local v9 # "i":I
:cond_74
goto :goto_37
.line 100
.restart local v5 # "mediaPlaylistDataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
:catch_75
move-exception v6
.line 101
.local v6, "e":Ljava/io/IOException;
if-eqz p3, :cond_79
.line 105
goto :goto_37
.line 102
:cond_79
throw v6
.line 119
.end local v5 # "mediaPlaylistDataSpec":Lcom/google/android/exoplayer2/upstream/DataSpec;
.end local v6 # "e":Ljava/io/IOException;
:cond_7a
return-object v2
.end method