2014-09-29 54 views
12

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

+0

我不认为有默认行为,你可以轻松做到这一点。它是开源的。您可以将其分叉并更改缓存的下载位置。 – tasomaniac 2015-02-04 11:10:35

+0

我有同样的问题。你有没有找到实现这个的方法? – 2015-09-28 07:42:01

+0

@ fisher3421你有什么解决方案我也在寻找相同的。 – 2018-02-22 06:57:51

回答

2

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

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

+2

覆盖HttpDataSource是错误的方法,因为ExoPlayer具有缓存实现的目标类。例如CacheDataSource。我想要使​​用这个类的正确方式。 – fisher3421 2015-03-30 09:09:48

5

您使用使用cache和dataSource创建的cacheDataSource。这个cacheDataSource然后被ExtractorSampleSource使用。下面是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); 
+0

这是缓存工作的整个实现吗?我已经实现了这一点,但不管我做什么,打印'cache.getCacheSpace()'都显示0。任何想法或提示填补缓存? – welshk91 2015-10-29 17:42:33

+1

仅适用于DASH。请参阅https://github.com/google/ExoPlayer/issues/420 – aeracode 2016-03-11 10:47:18