ExoPlayer缓存

时间:2014-09-29 08:08:55

标签: android exoplayer

我正在尝试使用ExoPlayer通过http播放视频。我想在视频加载后保存视频并从缓存中播放。如何从缓存实现缓存和回放?可以给我任何样品。

3 个答案:

答案 0 :(得分:5)

您使用使用cache和dataSource创建的cacheDataSource。这个cacheDataSource然后由ExtractorSampleSource使用.Below是audioRenderer的代码,同样可以为videoRender完成;传递给exoplayerInstance.prepare(渲染器)。

Cache cache = new SimpleCache(mCtx.getCacheDir(), new LeastRecentlyUsedCacheEvictor(1024 * 1024 * 10));
DataSource dataSource = new DefaultUriDataSource(mCtx, "My Player");
CacheDataSource cacheDataSource = new CacheDataSource(cache, dataSource, false, false);
Allocator allocator = new DefaultAllocator(BUFFER_SEGMENT_SIZE);
ExtractorSampleSource extractorSampleSource = new ExtractorSampleSource(trackURI, cacheDataSource, allocator, BUFFER_SEGMENT_COUNT*BUFFER_SEGMENT_SIZE, new Mp3Extractor());
MediaCodecAudioTrackRenderer audioTrackRenderer = new MediaCodecAudioTrackRenderer(extractorSampleSource);

答案 1 :(得分:2)

您使用的是什么协议mpeg-dash或plain http。

您可以覆盖HttpDataSource并将传入的字节写入文件,并在再次播放时检查文件是否存在于所需位置,并将文件中的InputStream从您的文件而不是HttpDataSource更改为播放器。

答案 2 :(得分:0)

我在此库中使用exoplayer: https://github.com/danikula/AndroidVideoCache 它可以帮助您从资源(URL,文件)中缓存视频...

这是我的示例代码:

String mediaURL = "https://my_cool_vid.com/vi.mp4";
SimpleExoPlayer exoPlayer = ExoPlayerFactory.newSimpleInstance(getContext());
HttpProxyCacheServer proxyServer = HttpProxyCacheServer.Builder(getContext()).maxCacheSize(1024 * 1024 * 1024).build();

String proxyURL = proxyServer.getProxyUrl(mediaURL);


DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(getContext(),
                Util.getUserAgent(getContext(), getActivity().getApplicationContext().getPackageName()));


exoPlayer.prepare(new ProgressiveMediaSource.Factory(dataSourceFactory)
                .createMediaSource(Uri.parse(proxyURL)););