android视频播放器缓存

今天介绍一个视频离线缓存的框架,由于视频播放的时候下载多次是没有意义的。今天介绍的AndroidVideoCache支持VideoView/MediaPlayer, ExoPlayer等播放器实现离线缓存功能。

主要特征:

  • 流媒体磁盘缓存;
  • 资源离线缓存;
  • 局部加载;
  • 缓存限制 (最大缓存大小, 最大文件数);
  • 支持多客户端.

注意,AndroidVideoCache只对媒体文件使用直接url,它不支持任何流技术,如DASH,平滑流,HLS。


开始使用

增加依赖

dependencies {
    compile 'com.danikula:videocache:2.7.0'
}

并使用代理的url代替原来的url来添加缓存:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

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

private HttpProxyCacheServer getProxy() {
    // should return single instance of HttpProxyCacheServer shared for whole app.
}

为了保证正常工作,你应该在整个应用程序中使用一个HttpProxyCacheServer的实例。

public class App extends Application {

    private HttpProxyCacheServer proxy;

    public static HttpProxyCacheServer getProxy(Context context) {
        App app = (App) context.getApplicationContext();
        return app.proxy == null ? (app.proxy = app.newProxy()) : app.proxy;
    }

    private HttpProxyCacheServer newProxy() {
        return new HttpProxyCacheServer(this);
    }
}

或者使用简单工厂。更可取的方法是使用像Dagger这样的依赖注入器。


方法

磁盘缓存

默认情况下,HttpProxyCacheServer使用512Mb的缓存文件。你可以改变这个值:

private HttpProxyCacheServer newProxy() {
    return new HttpProxyCacheServer.Builder(this)
            .maxCacheSize(1024 * 1024 * 1024)       // 1 Gb for cache
            .build();
}

或者可以限制缓存中的文件总数:

private HttpProxyCacheServer newProxy() {
    return new HttpProxyCacheServer.Builder(this)
            .maxCacheFilesCount(20)
            .build();
}

甚至实施你自己的DiskUsage策略:

private HttpProxyCacheServer newProxy() {
    return new HttpProxyCacheServer.Builder(this)
            .diskUsage(new MyCoolDiskUsageStrategy())
            .build();
}
监听缓存进度

使用HttpProxyCacheServer。registerCacheListener(CacheListener listener)方法,可以用回调onCacheAvailable(File cacheFile,String url,int percentsAvailable)来设置监听器,以了解缓存的进度。不要忘记在HttpProxyCacheServer的帮助下取消订阅侦听器。unregisterCacheListener(CacheListener listener)方法以避免内存泄漏。

使用HttpProxyCacheServer。isCached(String url)方法检查url的内容是否完全缓存到文件中。

为缓存的文件提供名称

默认情况下,AndroidVideoCache使用MD5的视频url作为文件名。但在某些情况下,url不稳定,它可以包含一些生成的部分(例如会话标记)。在这种情况下,缓存机制将被破坏。要修复它,您必须提供自己的文件生成器:

public class MyFileNameGenerator implements FileNameGenerator {

    // Urls contain mutable parts (parameter 'sessionToken') and stable video's id (parameter 'videoId').
    // e. g. http://example.com?videoId=abcqaz&sessionToken=xyz987
    public String generate(String url) {
        Uri uri = Uri.parse(url);
        String videoId = uri.getQueryParameter("videoId");
        return videoId + ".mp4";
    }
}

...
HttpProxyCacheServer proxy = HttpProxyCacheServer.Builder(context)
    .fileNameGenerator(new MyFileNameGenerator())
    .build()
添加自定义http标头

您可以在HeadersInjector的帮助下添加定制的标题:

public class UserAgentHeadersInjector implements HeaderInjector {

    @Override
    public Map<String, String> addHeaders(String url) {
        return Maps.newHashMap("User-Agent", "Cool app v1.1");
    }
}

private HttpProxyCacheServer newProxy() {
    return new HttpProxyCacheServer.Builder(this)
            .headerInjector(new UserAgentHeadersInjector())
            .build();
}

使用 exoPlayer

您可以使用exoPlayer和AndroidVideoCache。参见exoPlayer分支中的示例应用程序。注释exoPlayer也支持缓存。

例子

详细使用方法见sample

项目地址

AndroidVideoCache : https://github.com/danikula/AndroidVideoCache

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Android Studio视频播放器是一种基于Android Studio开发的应用程序,用于在Android设备上播放视频。它可以支持多种视频格式,包括MP4、AVI、FLV等。用户可以通过该应用程序轻松地播放本地视频文件或在线视频。此外,该应用程序还具有一些高级功能,如视频缓存视频下载、视频分享等。 ### 回答2: Android Studio作为Android应用开发的主流工具,提供了许多基础API和开发工具,可以支持各种不同类型的应用程序的开发。其中,视频播放器Android应用的一个重要组成部分之一。 Android Studio提供了许多视频播放器相关API和组件,包括MediaPlayer,VideoView,ExoPlayer等。其中,MediaPlayer是Android系统自带的基础播放器组件,支持本地音频和视频播放。VideoView是基于MediaPlayer的一个封装,可以更方便地对视频进行控制。ExoPlayer则是基于更加先进的技术进行开发的播放器组件,支持更多的格式和功能,是目前Android应用中最常用的播放器组件之一。 使用Android Studio进行视频播放器的开发,需要考虑到以下几个方面:一是界面设计,包括视频播放器的UI和交互功能;二是数据源管理,包括本地文件和网络资源的读取和解码;三是播放控制,包括播放、暂停、停止、快进快退等功能的实现。 在界面设计方面,可以使用Android Studio提供的布局组件和自定义控件来实现视频播放器的UI界面。可以通过设置背景、字体、播放按钮等控件的样式和交互方式,来提高用户的使用体验。 在数据源管理方面,可以使用Android Studio提供的文件和网络读取API,通过异步方式加载数据源并进行解码。在使用ExoPlayer进行开发时,可以使用其提供的DataSourceFactory和MediaSource来管理数据源和音视频资源。 在播放控制方面,可以通过API来实现音视频的播放、暂停、停止、快进快退等操作。可以使用MediaController等控件来进行播放控制器的开发,从而提供更加人性化的控制体验。 总之,通过Android Studio进行视频播放器的开发,需要掌握相关的API和组件,同时也需要考虑到整个应用的架构设计和功能优化。随着Android技术的不断发展和更新,视频播放器的开发也会更加便捷和高效。 ### 回答3: AndroidStudio(以下简称AS)是目前最流行的Android开发工具之一,它提供了人性化的界面和完善的功能,方便我们开发和调试Android应用。在AS中开发视频播放器也变得异常简单,我们只需要引入一个名为ExoPlayer的第三方库即可轻松实现视频播放功能。 ExoPlayer是Google官方提供的播放器库,支持多种格式的视频播放,包括HLS、DASH、MP4等,可以轻松实现视频缓存、多线程播放、动态分辨率调整等复杂功能。使用ExoPlayer还可以实现播放的手势控制、后台播放和画中画等特殊功能。 在AS中使用ExoPlayer也很简单,我们只需要在build.gradle文件中添加以下依赖即可: ``` implementation 'com.google.android.exoplayer:exoplayer-core:2.x.x' implementation 'com.google.android.exoplayer:exoplayer-ui:2.x.x' ``` 其中,exoplayer-core用于提供播放器核心功能,exoplayer-ui用于提供播放器默认UI,如果需要自定义UI,则需要继承SimpleExoPlayerView实现。 然后,我们需要创建一个ExoPlayer实例,设置数据源并将其与SimpleExoPlayerView关联即可实现播放: ``` SimpleExoPlayerView simpleExoPlayerView = findViewById(R.id.player_view); SimpleExoPlayer player = new SimpleExoPlayer.Builder(context).build(); simpleExoPlayerView.setPlayer(player); Uri uri = Uri.parse("http://url.to.video.mp4"); MediaItem mediaItem = MediaItem.fromUri(uri); player.setMediaItem(mediaItem); player.prepare(); player.play(); ``` 以上代码中,我们创建了一个SimpleExoPlayerView,然后创建了一个SimpleExoPlayer实例,并将其与SimpleExoPlayerView关联。接着,我们设置了播放数据源,并调用prepare()和play()方法开始播放视频。 使用ExoPlayer实现视频播放功能非常简单,开发者只需要关心如何设置数据源、播放控制和UI个性化定制即可。值得注意的是,在ExoPlayer中缓存功能需要自行实现,但在GitHub上有很多开源的缓存库可以直接使用。 综上所述,通过ExoPlayer和AS,实现一个视频播放器十分容易,它可以帮助开发者极大地提高应用的用户体验。然而,在实现的过程中需要注意如何优化播放器性能,以及如何处理异常情况,以保证应用的高可用性和用户满意度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值