使用ExoPlayer库和OkHttp库,将视频缓存在本地进行播放,并在用户回到应用程序并重新聚焦时重新加载视频。具体的代码示例请参见以下代码:
1.在 build.gradle 中添加依赖:
implementation 'com.google.android.exoplayer:exoplayer:2.14.1'
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
2.在您的活动或片段中实例化ExoPlayer:
private SimpleExoPlayer exoPlayer;
private Cache cache;
private void initializePlayer() {
if (exoPlayer == null) {
DefaultRenderersFactory renderersFactory = new DefaultRenderersFactory(this);
DefaultTrackSelector trackSelector = new DefaultTrackSelector();
DefaultLoadControl loadControl = new DefaultLoadControl.Builder()
.setAllocator(new DefaultAllocator(true, C.DEFAULT_BUFFER_SEGMENT_SIZE))
.setBufferDurationsMs(VideoRenderer.DEFAULT_MIN_BUFFER_MS, 60000, VideoRenderer.DEFAULT_BUFFER_FOR_PLAYBACK_MS, VideoRenderer.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS)
.setTargetBufferBytes(C.LENGTH_UNSET)
.setPrioritizeTimeOverSizeThresholds(true)
.createDefaultLoadControl();
exoPlayer = new SimpleExoPlayer.Builder(this, renderersFactory)
.setTrackSelector(trackSelector)
.setLoadControl(loadControl)
.build();
String userAgent = Util.getUserAgent(this, "AppName");
CacheKeyFactory cacheKeyFactory = new DefaultCacheKeyFactory();
File cacheDirectory = new File(getCacheDir(), "exo-cache");
cache = new SimpleCache(cacheDirectory, new NoOpCacheEvictor(), new ExoDatabaseProvider(this));
CacheDataSource.Factory cacheDataSourceFactory = new CacheDataSource.Factory()
.setCache(cache)
.setUpstreamDataSourceFactory(new DefaultDataSourceFactory(this, userAgent))
.setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR)
.setCacheKeyFactory(cacheKeyFactory);
// Set cache data source for video URL
MediaSource videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory).createMediaSource(mediaUrl);
exoPlayer.setMediaSource(videoSource);
exoPlayer.prepare();
exoPlayer.setPlayWhenReady(true);
}
}
3.实现 onPause() 方法并停止 ExoPlayer:
@Override
protected void onPause() {
super.onPause();
if (exoPlayer != null) {
exoPlayer.setPlayWhenReady(false);
}
}
4.实现 onResume() 方法并在 ExoPlayer 中恢复播放:
@Override
protected void onResume() {
super.onResume();
if (exoPlayer != null) {
exoPlayer.setPlayWhenReady(true);
}
}
下一篇:android视频剪辑sdk