diff --git a/android-studio-project/ExoPlayer-AirPlay-Receiver/src/main/java/com/github/warren_bank/exoplayer_airplay_receiver/exoplayer2/DownloadTracker.java b/android-studio-project/ExoPlayer-AirPlay-Receiver/src/main/java/com/github/warren_bank/exoplayer_airplay_receiver/exoplayer2/DownloadTracker.java index 8321d6e..d30355b 100644 --- a/android-studio-project/ExoPlayer-AirPlay-Receiver/src/main/java/com/github/warren_bank/exoplayer_airplay_receiver/exoplayer2/DownloadTracker.java +++ b/android-studio-project/ExoPlayer-AirPlay-Receiver/src/main/java/com/github/warren_bank/exoplayer_airplay_receiver/exoplayer2/DownloadTracker.java @@ -18,6 +18,7 @@ import androidx.media3.common.Format; import androidx.media3.common.MediaItem; import androidx.media3.common.TrackGroup; +import androidx.media3.common.TrackSelectionParameters; import androidx.media3.common.util.Log; import androidx.media3.common.util.Util; import androidx.media3.datasource.HttpDataSource; @@ -148,15 +149,16 @@ public void startDownloadService() { public void startDownload(MediaItem mediaItem, RenderersFactory renderersFactory) { @Nullable Download download = downloads.get(checkNotNull(mediaItem.playbackProperties).uri); - startDownload(download, mediaItem, renderersFactory); + startDownload(download, mediaItem, renderersFactory, null); } - public void startDownload(Download download, MediaItem mediaItem, RenderersFactory renderersFactory) { + public void startDownload(Download download, MediaItem mediaItem, RenderersFactory renderersFactory, TrackSelectionParameters trackSelectionParameters) { if (download == null || download.state == Download.STATE_FAILED) { - new StartDownloadHelper( - DownloadHelper.forMediaItem(context, mediaItem, renderersFactory, httpDataSourceFactory), - mediaItem - ); + if (trackSelectionParameters == null) { + trackSelectionParameters = DownloadHelper.getDefaultTrackSelectorParameters(context); + } + DownloadHelper downloadHelper = DownloadHelper.forMediaItem(mediaItem, trackSelectionParameters, renderersFactory, httpDataSourceFactory); + new StartDownloadHelper(downloadHelper, mediaItem); } } @@ -171,13 +173,13 @@ public void stopDownload(Download download) { } } - public void toggleDownload(MediaItem mediaItem, RenderersFactory renderersFactory) { + public void toggleDownload(MediaItem mediaItem, RenderersFactory renderersFactory, TrackSelectionParameters trackSelectionParameters) { @Nullable Download download = downloads.get(checkNotNull(mediaItem.playbackProperties).uri); if (download != null && download.state != Download.STATE_FAILED) { stopDownload(download); } else { - startDownload(download, mediaItem, renderersFactory); + startDownload(download, mediaItem, renderersFactory, trackSelectionParameters); } } @@ -362,6 +364,9 @@ private void startDownload() { } private void startDownload(DownloadRequest downloadRequest) { + if ((downloadRequest == null) || downloadRequest.streamKeys.isEmpty()) + return; + DownloadService.sendAddDownload(context, MyDownloadService.class, downloadRequest, /* foreground= */ false); } diff --git a/android-studio-project/ExoPlayer-AirPlay-Receiver/src/main/java/com/github/warren_bank/exoplayer_airplay_receiver/exoplayer2/PlayerManager.java b/android-studio-project/ExoPlayer-AirPlay-Receiver/src/main/java/com/github/warren_bank/exoplayer_airplay_receiver/exoplayer2/PlayerManager.java index ce75954..a572f2a 100644 --- a/android-studio-project/ExoPlayer-AirPlay-Receiver/src/main/java/com/github/warren_bank/exoplayer_airplay_receiver/exoplayer2/PlayerManager.java +++ b/android-studio-project/ExoPlayer-AirPlay-Receiver/src/main/java/com/github/warren_bank/exoplayer_airplay_receiver/exoplayer2/PlayerManager.java @@ -755,7 +755,11 @@ public void toggleCurrentItemUseCache() { if (mediaItem == null) return; sample.updateUseCache(!sample.useCache); - downloadTracker.toggleDownload(mediaItem, renderersFactory); + downloadTracker.toggleDownload( + mediaItem, + renderersFactory, + ((exoPlayer == null) ? null : exoPlayer.getTrackSelectionParameters()) + ); } // AirPlay functionality (exposed by HTTP endpoints)