2014-09-29 2 views
12

Я использую ExoPlayer для воспроизведения видео по http. И я хочу сохранить видео после загрузки видео и воспроизвести его из кеша. Как реализовать кеш и воспроизведение из кеша? Могу дать мне образцы.Кэш ExoPlayer

+0

Я не думаю, что по умолчанию вы можете сделать это легко. Это с открытым исходным кодом. Вы можете разблокировать его и изменить местоположение кэша. – tasomaniac

+0

У меня такая же проблема. вы нашли способ реализовать это? –

+0

@ fisher3421 у вас есть решение, которое я тоже ищу. –

ответ

2

Какой протокол вы используете mpeg-dash или обычный http.

Вы можете переопределить HttpDataSource и записать входящие байты в файл, а при повторном воспроизведении проверьте, существует ли файл в нужном месте и измените InputStream, поданный на плеер из вашего файла вместо HttpDataSource.

+2

Переопределение HttpDataSource - это неправильный подход, поскольку ExoPlayer имеет целевые классы для реализации кэша. Например, CacheDataSource. Я хотел бы получить правильный способ использования этих классов. – fisher3421

5

Вы используете cacheDataSource, созданный с использованием кеша и dataSource. Этот 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); 
+0

- это вся реализация для работы кэширования? Я реализовал это, но печать 'cache.getCacheSpace()' показывает 0 независимо от того, что я делаю. Любые идеи или советы по заполнению кеша? – welshk91

+1

Работает только с DASH. См. Https://github.com/google/ExoPlayer/issues/420. – aeracode