2014-09-29 28 views
12

http üzerinden oynatma videosu için ExoPlayer kullanıyorum. Ve video yüklendikten sonra videoyu kaydetmek ve önbellekten oynatmak istiyorum. Önbellekten ve önbellekten oynatma nasıl yapılır? Bana herhangi bir örnek verebilir.ExoPlayer önbellek

+0

Bunu kolayca yapabileceğiniz varsayılan davranış olduğunu düşünmüyorum. Açık kaynak. Çatalabilir ve önbelleğin indirme yerini değiştirebilirsiniz. – tasomaniac

+0

Aynı problemim var. Bunu uygulamak için bir yol buluyor musunuz? –

+0

@ fisher3421 Ben de aynı şekilde arıyorum bir çözüm var. –

cevap

2

Hangi protokolleri mpeg-dash veya plain http kullanıyorsunuz.

HttpDataSource'ı geçersiz kılabilir ve bir dosyaya gelen baytları yazabilir ve yeniden oynatırken istediğiniz dosyada var olup olmadığını kontrol edebilir ve HttpDataSource yerine dosyanıza beslenen InputStream öğesini dosyanızdan değiştirebilirsiniz.

+2

HttpDataSource geçersiz kılma ExoPlayer önbellek uygulaması için hedef sınıfları olduğundan, yanlış bir yaklaşımdır. Örneğin CacheDataSource. Bu sınıfları kullanmanın doğru yolunu almak istiyorum. – fisher3421

5

Önbellek ve dataSource kullanılarak oluşturulan cacheDataSource kullanıyorsunuz. Bu cacheDataSource daha sonra ExtractorSampleSource.Below tarafından kullanılır AudioRenderer için kod, benzer şekilde videoRender için yapılabilir; exoplayerInstance.prepare'ye (renderers) aktarılıyor.

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

, bu önbelleğe alma işleminin tüm uygulanması mı? Bunu uyguladım, ancak 'cache.getCacheSpace()' yazdırma, ne yaparsam yapayım 0 gösterir. Önbelleği doldurmak için herhangi bir fikir veya ipucu? – welshk91

+1

Yalnızca DASH ile çalışır. Https://github.com/google/ExoPlayer/issues/420 adresini ziyaret edin. – aeracode