mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Remove offline classes for now (not ready yet)
This commit is contained in:
parent
4ee0b2e1c8
commit
19a3d94022
@ -1,195 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.google.android.exoplayer2.source.offline;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.upstream.DataSink;
|
||||
import com.google.android.exoplayer2.upstream.DataSource;
|
||||
import com.google.android.exoplayer2.upstream.DummyDataSource;
|
||||
import com.google.android.exoplayer2.upstream.FileDataSource;
|
||||
import com.google.android.exoplayer2.upstream.PriorityDataSource;
|
||||
import com.google.android.exoplayer2.upstream.cache.Cache;
|
||||
import com.google.android.exoplayer2.upstream.cache.CacheDataSink;
|
||||
import com.google.android.exoplayer2.upstream.cache.CacheDataSource;
|
||||
import com.google.android.exoplayer2.util.ClosedSource;
|
||||
import com.google.android.exoplayer2.util.PriorityTaskManager;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Base class for stream downloaders.
|
||||
*
|
||||
* <p>All of the methods are blocking. Also they are not thread safe, except {@link
|
||||
* #getTotalSegments()}, {@link #getDownloadedSegments()} and {@link #getDownloadedBytes()}.
|
||||
*
|
||||
* @param <M> The type of the manifest object.
|
||||
* @param <K> The type of the representation key object.
|
||||
*/
|
||||
@ClosedSource(reason = "Not ready yet")
|
||||
public abstract class Downloader<M, K> {
|
||||
|
||||
/**
|
||||
* Listener notified when download progresses.
|
||||
*/
|
||||
public interface ProgressListener {
|
||||
/**
|
||||
* Called for the first time after the initialization and then after download of each segment.
|
||||
* It is called on the thread which invoked {@link #downloadRepresentations(ProgressListener)}.
|
||||
*
|
||||
* @param downloader The reporting instance.
|
||||
* @param totalSegments Total number of segments in the content.
|
||||
* @param downloadedSegments Total number of downloaded segments.
|
||||
* @param downloadedBytes Total number of downloaded bytes.
|
||||
* @see #downloadRepresentations(ProgressListener)
|
||||
*/
|
||||
void onDownloadProgress(Downloader<?, ?> downloader, int totalSegments,
|
||||
int downloadedSegments, long downloadedBytes);
|
||||
}
|
||||
|
||||
protected final Cache cache;
|
||||
protected final CacheDataSource dataSource;
|
||||
protected final CacheDataSource offlineDataSource;
|
||||
protected final PriorityTaskManager priorityTaskManager;
|
||||
protected final String manifestUri;
|
||||
|
||||
protected volatile int totalSegments;
|
||||
protected volatile int downloadedSegments;
|
||||
protected volatile long downloadedBytes;
|
||||
|
||||
/**
|
||||
* Constructs a Downloader.
|
||||
*
|
||||
* @param manifestUri The URI of the manifest to be downloaded.
|
||||
* @param cache Cache instance to be used to store downloaded data.
|
||||
* @param upstreamDataSource A {@link DataSource} for downloading data.
|
||||
* @param cacheReadDataSource A {@link DataSource} for reading data from the cache.
|
||||
* If null, a {@link FileDataSource} instance is created and used.
|
||||
* @param cacheWriteDataSink A {@link DataSink} for writing data to the cache. If
|
||||
* null, a {@link CacheDataSink} instance is created and used.
|
||||
* @param priorityTaskManager If not null it's used to check whether it is allowed to proceed with
|
||||
* download. Downloader priority is {@link C#PRIORITY_DOWNLOAD}.
|
||||
*/
|
||||
public Downloader(String manifestUri, Cache cache, DataSource upstreamDataSource,
|
||||
@Nullable DataSource cacheReadDataSource, @Nullable DataSink cacheWriteDataSink,
|
||||
@Nullable PriorityTaskManager priorityTaskManager) {
|
||||
if (priorityTaskManager != null) {
|
||||
upstreamDataSource =
|
||||
new PriorityDataSource(upstreamDataSource, priorityTaskManager, C.PRIORITY_DOWNLOAD);
|
||||
} else {
|
||||
priorityTaskManager = new PriorityTaskManager(); // dummy PriorityTaskManager
|
||||
}
|
||||
if (cacheReadDataSource == null) {
|
||||
cacheReadDataSource = new FileDataSource();
|
||||
}
|
||||
if (cacheWriteDataSink == null) {
|
||||
cacheWriteDataSink = new CacheDataSink(cache,
|
||||
CacheDataSource.DEFAULT_MAX_CACHE_FILE_SIZE);
|
||||
}
|
||||
|
||||
this.manifestUri = manifestUri;
|
||||
this.cache = cache;
|
||||
this.dataSource = new CacheDataSource(cache, upstreamDataSource, cacheReadDataSource,
|
||||
cacheWriteDataSink, CacheDataSource.FLAG_BLOCK_ON_CACHE, null);
|
||||
this.offlineDataSource = new CacheDataSource(cache, DummyDataSource.INSTANCE,
|
||||
cacheReadDataSource, null, CacheDataSource.FLAG_BLOCK_ON_CACHE, null);
|
||||
this.priorityTaskManager = priorityTaskManager;
|
||||
|
||||
resetCounters();
|
||||
}
|
||||
|
||||
/**
|
||||
* Downloads the manifest.
|
||||
*
|
||||
* @return The downloaded manifest.
|
||||
* @throws IOException If an error occurs reading data from the stream.
|
||||
*/
|
||||
public abstract M downloadManifest() throws IOException;
|
||||
|
||||
/**
|
||||
* Selects multiple representations pointed to by the keys for downloading, removing or checking
|
||||
* status. Any previous selection is cleared.
|
||||
*/
|
||||
public abstract void selectRepresentations(K... keys);
|
||||
|
||||
/**
|
||||
* Initializes the total segments, downloaded segments and downloaded bytes counters for the
|
||||
* selected representations.
|
||||
*
|
||||
* @throws IOException Thrown when there is an error while reading from cache.
|
||||
* @throws DownloaderException Thrown when a representation index is unbounded.
|
||||
* @throws InterruptedException If the thread has been interrupted.
|
||||
* @see #getTotalSegments()
|
||||
* @see #getDownloadedSegments()
|
||||
* @see #getDownloadedBytes()
|
||||
*/
|
||||
public abstract void initStatus() throws DownloaderException, InterruptedException, IOException;
|
||||
|
||||
/**
|
||||
* Downloads the content for the selected representations in sync or resumes a previously stopped
|
||||
* download.
|
||||
*
|
||||
* @throws IOException Thrown when there is an error while downloading.
|
||||
* @throws DownloaderException Thrown when no index data can be found for a representation or
|
||||
* the index is unbounded.
|
||||
* @throws InterruptedException If the thread has been interrupted.
|
||||
*/
|
||||
public abstract void downloadRepresentations(@Nullable ProgressListener listener)
|
||||
throws IOException, DownloaderException, InterruptedException;
|
||||
|
||||
/**
|
||||
* Returns the total number of segments in the representations which are selected, or {@link
|
||||
* C#LENGTH_UNSET} if it hasn't been calculated yet.
|
||||
*
|
||||
* @see #initStatus()
|
||||
*/
|
||||
public final int getTotalSegments() {
|
||||
return totalSegments;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total number of downloaded segments in the representations which are selected, or
|
||||
* {@link C#LENGTH_UNSET} if it hasn't been calculated yet.
|
||||
*
|
||||
* @see #initStatus()
|
||||
*/
|
||||
public final int getDownloadedSegments() {
|
||||
return downloadedSegments;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the total number of downloaded bytes in the representations which are selected, or
|
||||
* {@link C#LENGTH_UNSET} if it hasn't been calculated yet.
|
||||
*
|
||||
* @see #initStatus()
|
||||
*/
|
||||
public final long getDownloadedBytes() {
|
||||
return downloadedBytes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all representations declared in the manifest and the manifest itself.
|
||||
*
|
||||
* @throws InterruptedException Thrown if the thread was interrupted.
|
||||
*/
|
||||
public abstract void removeAll() throws InterruptedException;
|
||||
|
||||
protected final void resetCounters() {
|
||||
totalSegments = C.LENGTH_UNSET;
|
||||
downloadedSegments = C.LENGTH_UNSET;
|
||||
downloadedBytes = C.LENGTH_UNSET;
|
||||
}
|
||||
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.google.android.exoplayer2.source.offline;
|
||||
|
||||
import com.google.android.exoplayer2.util.ClosedSource;
|
||||
|
||||
/** Thrown on an error in {@link Downloader}. */
|
||||
@ClosedSource(reason = "Not ready yet")
|
||||
public final class DownloaderException extends Exception {
|
||||
|
||||
public DownloaderException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
}
|
@ -1,88 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.google.android.exoplayer2.source.offline;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.upstream.DataSink;
|
||||
import com.google.android.exoplayer2.upstream.DataSource;
|
||||
import com.google.android.exoplayer2.upstream.DataSource.Factory;
|
||||
import com.google.android.exoplayer2.upstream.cache.Cache;
|
||||
import com.google.android.exoplayer2.util.ClosedSource;
|
||||
import com.google.android.exoplayer2.util.PriorityTaskManager;
|
||||
|
||||
/**
|
||||
* A factory class that produces {@link Downloader}.
|
||||
*/
|
||||
@ClosedSource(reason = "Not ready yet")
|
||||
public abstract class DownloaderFactory<T extends Downloader<?, ?>> {
|
||||
|
||||
private final Factory upstreamDataSourceFactory;
|
||||
private final Factory cacheReadDataSourceFactory;
|
||||
private final DataSink.Factory cacheWriteDataSinkFactory;
|
||||
|
||||
protected final Cache cache;
|
||||
protected final PriorityTaskManager priorityTaskManager;
|
||||
|
||||
/**
|
||||
* Constructs a DashDownloaderFactory.
|
||||
*
|
||||
* @param cache Cache instance to be used to store downloaded data.
|
||||
* @param upstreamDataSourceFactory A {@link Factory} for downloading data.
|
||||
*/
|
||||
public DownloaderFactory(Cache cache, Factory upstreamDataSourceFactory) {
|
||||
this(cache, upstreamDataSourceFactory, null, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a DashDownloaderFactory.
|
||||
*
|
||||
* @param cache Cache instance to be used to store downloaded data.
|
||||
* @param upstreamDataSourceFactory A {@link Factory} for downloading data.
|
||||
* @param cacheReadDataSourceFactory A {@link Factory} for reading data from the cache.
|
||||
* If null, null is passed to {@link Downloader} constructor.
|
||||
* @param cacheWriteDataSinkFactory A {@link DataSink.Factory} for writing data to the cache. If
|
||||
* null, null is passed to {@link Downloader} constructor.
|
||||
* @param priorityTaskManager If one is given then the download priority is set lower than
|
||||
* loading. If null, null is passed to {@link Downloader} constructor.
|
||||
*/
|
||||
public DownloaderFactory(Cache cache, Factory upstreamDataSourceFactory,
|
||||
@Nullable Factory cacheReadDataSourceFactory,
|
||||
@Nullable DataSink.Factory cacheWriteDataSinkFactory,
|
||||
@Nullable PriorityTaskManager priorityTaskManager) {
|
||||
this.cache = cache;
|
||||
this.upstreamDataSourceFactory = upstreamDataSourceFactory;
|
||||
this.cacheReadDataSourceFactory = cacheReadDataSourceFactory;
|
||||
this.cacheWriteDataSinkFactory = cacheWriteDataSinkFactory;
|
||||
this.priorityTaskManager = priorityTaskManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link Downloader} with the given manifest.
|
||||
*
|
||||
* @param manifestUri The URI of the manifest of the DASH to be downloaded.
|
||||
* @return A {@link Downloader}.
|
||||
*/
|
||||
public final T create(String manifestUri) {
|
||||
return create(manifestUri,
|
||||
upstreamDataSourceFactory != null ? upstreamDataSourceFactory.createDataSource() : null,
|
||||
cacheReadDataSourceFactory != null ? cacheReadDataSourceFactory.createDataSource() : null,
|
||||
cacheWriteDataSinkFactory != null ? cacheWriteDataSinkFactory.createDataSink() : null);
|
||||
}
|
||||
|
||||
protected abstract T create(String manifestUri, DataSource upstreamDataSource,
|
||||
DataSource cacheReadDataSource, DataSink cacheWriteDataSink);
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user