MediaLoader

Table of Content
- Introduction
- Features
- Quick start
- Usage
- Documentation
- Sample
- FAQ
- Change log
- Where released
- Support
- License
Introduction
MediaLoader allow you to enable cache video/audio while playing for any android media player with single line code.
Features
- caching to disk while streaming,no wait;
- offline work with cached data,no download again;
- working with any media player on android(MediaPlayer,VideoView,ExoPlayer,ijkplayer...);
- cache management(cache dir change,cache file rename,max cache files size limit, max cache files count limit...);
- pre-download available,can pre-download the audio/video to avoid waiting.
Quick start
Just add dependency (MediaLoader was released in jcenter):
dependencies {
    compile 'com.vincan:medialoader:1.0.0'
}
and use new url from MediaLoader instead of original url:
String proxyUrl = MediaLoader.getInstance(getContext()).getProxyUrl(VIDEO_URL);
videoView.setVideoPath(proxyUrl);
Usage
Listen downloading status
Add callback to listen downloading status:
MediaLoader.addDownloadListener(String url, DownloadListener listener)
don't forget to remove listener to avoid memory leaks:
MediaLoader.removeDownloadListener(String url, DownloadListener listener)
Change initial configuration
You can change the default initial configuration with help of MediaLoaderConfig:
        MediaLoaderConfig mediaLoaderConfig = new MediaLoaderConfig.Builder(this)
                .cacheRootDir(DefaultConfigFactory.createCacheRootDir(this, "your_cache_dir"))//directory for cached files
                .cacheFileNameGenerator(new HashCodeFileNameCreator())//names for cached files
                .maxCacheFilesCount(100)//max files count
                .maxCacheFilesSize(100 * 1024 * 1024)//max files size
                .maxCacheFileTimeLimit(5 * 24 * 60 * 60)//max file time
                .downloadThreadPoolSize(3)//download thread size
                .downloadThreadPriority(Thread.NORM_PRIORITY)//download thread priority
                .build();
        MediaLoader.getInstance(this).init(mediaLoaderConfig);
Pre-download
Sometimes the MediaLoader doesn't work good in the case of poor network.So pre-download audio/video is a good idea to avoid no sense of waiting.
DownloadManager is a good partner of MediaLoader.
Just use DownloadManager.enqueue(Request request, DownloadListener listener) to start and DownloadManager.stop(String url) to stop pre-downloading.
More useful method such as pause,resume and so on are available in DownloadManager.
See API list for more details.
Documentation
MediaLoader
| desc | API | 
|---|---|
| get MediaLoader instance | MediaLoader#getInstance(Context context) | 
| initialize MediaLoader | MediaLoader#init(MediaLoaderConfig mediaLoaderConfig) | 
| get proxy url | MediaLoader#getProxyUrl(String url) | 
| is file cached | MediaLoader#isCached(String url) | 
| get cache file | MediaLoader#getCacheFile(String url) | 
| add download listener | MediaLoader#addDownloadListener(String url, DownloadListener listener) | 
| remove download listener | MediaLoader#removeDownloadListener(String url, DownloadListener listener) | 
| remove download listener | MediaLoader#removeDownloadListener(DownloadListener listener) | 
| pause download | MediaLoader#pauseDownload(String url) | 
| resume download | MediaLoader#resumeDownload(String url) | 
| destroy MediaLoader instance | MediaLoader#destroy() | 
MediaLoaderConfig.Builder
| desc | API | 
|---|---|
| set cache root dir | MediaLoaderConfig.Builder#cacheRootDir(File file) | 
| set cache file name generator | MediaLoaderConfig.Builder#cacheFileNameGenerator(FileNameCreator fileNameCreator) | 
| set max cache files size | MediaLoaderConfig.Builder#maxCacheFilesSize(long size) | 
| set max cache files count | MediaLoaderConfig.Builder#maxCacheFilesCount(int count) | 
| set max cache file time | MediaLoaderConfig.Builder#maxCacheFileTimeLimit(long timeLimit) | 
| set download thread pool size | MediaLoaderConfig.Builder#downloadThreadPoolSize(int threadPoolSize) | 
| set download thread priority | MediaLoaderConfig.Builder#downloadThreadPriority(int threadPriority) | 
| set download ExecutorService | MediaLoaderConfig.Builder#downloadExecutorService(ExecutorService executorService) | 
| new MediaLoaderConfig instance | MediaLoaderConfig.Builder#build() | 
DownloadManager
| desc | API | 
|---|---|
| get MediaLoader instance | DownloadManager#getInstance(Context context) | 
| start download | DownloadManager#enqueue(Request request) | 
| start download | DownloadManager#enqueue(Request request, DownloadListener listener) | 
| is download task running | DownloadManager#isRunning(String url) | 
| pause download | DownloadManager#pause(String url) | 
| resume download | DownloadManager#resume(String url) | 
| stop download | DownloadManager#stop(String url) | 
| pause all download | DownloadManager#pauseAll() | 
| resume all download | DownloadManager#resumeAll() | 
| stop all download | DownloadManager#stopAll() | 
| is file cached | DownloadManager#isCached(String url) | 
| get cache file | DownloadManager#getCacheFile(String url) | 
| clean cache dir | DownloadManager#cleanCacheDir() | 
Sample
See sample project.
 

FAQ
1.What is the default initial configuration for MediaLoader?
| config key | default value | 
|---|---|
| cache dir | sdcard/Android/data/${application package}/cache/medialoader | 
| cache file naming | MD5(url) | 
| max cache files count | 500 | 
| max cache files size | 500 1024 1024(500M) | 
| max cache file time | 10 24 60 * 60(10 days) | 
| download thread pool size | 3 | 
| download thread priority | Thread.MAX_PRIORITY | 
Change log
See release notes
Where released
See bintray.com
Support
Any problem?
- Learn more from sample.
- Read the source code.
- New issue.
- Contact us for help.
License
MediaLoader is under the Apache-2.0 license. See the LICENSE file for details.
