Включение кеша для exoplayer - PullRequest
0 голосов
/ 28 января 2020

Я реализовал exoplayer для hls видеосвязи, после воспроизведения видео он снова загружает видео для воспроизведения, может кто-нибудь подсказать, как прекратить загрузку и воспроизводить без буферизации, когда видео полностью передается. Как хранить кеш для потокового видео hls. Пожалуйста, предоставьте решения, если таковые имеются. Заранее спасибо:)

 TrackSelector trackSelector = new DefaultTrackSelector(this);

    DefaultLoadControl loadControl = new DefaultLoadControl.Builder()
            .setBufferDurationsMs(1024, 64 * 1024, 1024, 1024)
            .createDefaultLoadControl();


    videoView = findViewById(R.id.video_view);
    player = ExoPlayerFactory.newSimpleInstance(this, trackSelector,loadControl);

// player = ExoPlayerFactory.newSimpleInstance (this);

    player.setPlayWhenReady(true);
    videoView.setPlayer(player);

    DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,
    Util.getUserAgent(this, "ExoPlayer"));

// Produces Extractor instances for parsing the media data.
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();


    MediaSource mediaSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(videoUrl));

    player.prepare(mediaSource);
    player.setPlayWhenReady(true);

1 Ответ

0 голосов
/ 28 января 2020

Android Video Cache Library делает то, что вы хотите. Выполните приведенный ниже шаг для кэширования своих видео.

шаг 1: скомпилируйте 'com.danikula: videocache: 2.7.1'

шаг 2: сохраните общий прокси в своем классе приложения

public class MyApplication extends Application {
    private HttpProxyCacheServer proxy;
        public static HttpProxyCacheServer getProxy(Context context) {
            MyApplication app = (MyApplication) context.getApplicationContext();
            return app.proxy == null ? (app.proxy = app.newProxy()) : app.proxy;
        }

        private HttpProxyCacheServer newProxy() {
            return new HttpProxyCacheServer.Builder(this)
                    .maxCacheSize(1024 * 1024 * 1024)
                    .build();
            //return new HttpProxyCacheServer(this);

        }
}

шаг 3: поместите класс MyApplication в файл манифеста, например

<application
        android:name=". MyApplication">
.
.
.
</application>

шаг 4: используйте URL-адрес прокси-сервера вместо исходного URL-адреса для добавления кэширования

HttpProxyCacheServer proxy = MyApplication.getProxy(activity);
            String proxyUrl = proxy.getProxyUrl(VIDEO_URL);
            videoView.setVideoPath(proxyUrl);

, если вы используете exoplayer

HttpProxyCacheServer proxy = getProxy(activity);
                String proxyUrl = proxy.getProxyUrl(VIDEO_URL);
PlayerView playerView = findViewById(R.id.video_view);
      ExoPlayer player = ExoPlayerFactory.newSimpleInstance(VideoActivity.this,
                new DefaultRenderersFactory(this),
                new DefaultTrackSelector());
        MediaSource mediaSource = buildMediaSource(proxyUrl);
        player.prepare(mediaSource, true, false);
        playerView.setPlayer(player);

Happy Coding:)

...