2014-09-29 44 views
12

Tôi đang khay để sử dụng ExoPlayer để phát lại video qua http. Và tôi muốn lưu video sau khi video được tải và phát video từ bộ nhớ cache. Làm thế nào để thực hiện bộ nhớ cache và phát lại từ bộ nhớ cache? Có thể cho tôi bất kỳ mẫu nào.Bộ nhớ cache ExoPlayer

+0

Tôi không nghĩ rằng có hành vi mặc định mà bạn có thể thực hiện việc này một cách dễ dàng. Nó là mã nguồn mở. Bạn có thể nĩa nó và thay đổi vị trí tải xuống của bộ nhớ cache. – tasomaniac

+0

Tôi có cùng một vấn đề. Bạn có tìm cách để thực hiện điều này không? –

+0

@ fisher3421 bạn có bất kỳ giải pháp nào mà tôi cũng đang tìm kiếm không. –

Trả lời

2

Giao thức nào bạn đang sử dụng mpeg-dash hoặc http thuần.

Bạn có thể ghi đè lên HttpDataSource và ghi byte đến vào tệp và khi phát lại kiểm tra xem tệp có tồn tại ở vị trí mong muốn hay không và thay đổi InputStream được nạp cho trình phát từ tệp của bạn thay vì HttpDataSource.

+2

Ghi đè HttpDataSource là cách tiếp cận sai vì ExoPlayer có các lớp đích để thực hiện bộ nhớ cache. Ví dụ: CacheDataSource. Tôi muốn có được quyền sử dụng các lớp học này. – fisher3421

5

Bạn sử dụng cacheDataSource được tạo bằng bộ nhớ cache và dataSource. CacheDataSource này sau đó được sử dụng bởi ExtractorSampleSource.Below là mã cho audioRenderer, tương tự có thể được thực hiện cho videoRender; chuyển tới exoplayerInstance.prepare (trình kết xuất).

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

đây có phải là toàn bộ triển khai để nhận bộ nhớ đệm hoạt động không? Tôi đã thực hiện điều này, nhưng in 'cache.getCacheSpace()' hiển thị 0 cho dù tôi có làm gì. Bất kỳ ý tưởng hoặc lời khuyên để điền vào bộ nhớ cache? – welshk91

+1

Chỉ hoạt động với DASH. Xem https://github.com/google/ExoPlayer/issues/420 – aeracode

Các vấn đề liên quan