我正在尝试使用ExoPlayer通过http播放视频。我想在视频加载后保存视频并从缓存中播放。如何从缓存实现缓存和回放?可以给我任何样品。
答案 0 :(得分:5)
您使用使用cache和dataSource创建的cacheDataSource。这个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);
答案 1 :(得分:2)
您使用的是什么协议mpeg-dash或plain http。
您可以覆盖HttpDataSource并将传入的字节写入文件,并在再次播放时检查文件是否存在于所需位置,并将文件中的InputStream从您的文件而不是HttpDataSource更改为播放器。
答案 2 :(得分:0)
我在此库中使用exoplayer: https://github.com/danikula/AndroidVideoCache 它可以帮助您从资源(URL,文件)中缓存视频...
这是我的示例代码:
String mediaURL = "https://my_cool_vid.com/vi.mp4";
SimpleExoPlayer exoPlayer = ExoPlayerFactory.newSimpleInstance(getContext());
HttpProxyCacheServer proxyServer = HttpProxyCacheServer.Builder(getContext()).maxCacheSize(1024 * 1024 * 1024).build();
String proxyURL = proxyServer.getProxyUrl(mediaURL);
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(getContext(),
Util.getUserAgent(getContext(), getActivity().getApplicationContext().getPackageName()));
exoPlayer.prepare(new ProgressiveMediaSource.Factory(dataSourceFactory)
.createMediaSource(Uri.parse(proxyURL)););