2014-09-29 88 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