AndroidVideoCache研究

AndroidVideoCache研究

01.AndroidVideoCache + ijk

我们想让ijk支持边下边播的能力,通过AndroidVideoCache就可以实现,AndroidVideoCache的设计很优雅,能够解耦不同的播放器,比如可以支持ijk、系统播放器mediaplayer、exoplayer等等。
ijk我们还使用之前文章里的代码:
ijkplayer系列1:ijkplayer介绍
https://blog.csdn.net/a910626/article/details/93657087

下面主要展示怎么把AndroidVideoCache和ijk融合。

代码:

    compile 'com.danikula:videocache:2.7.1'

public class Application extends android.app.Application {
    public static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context = this;
    }

    private HttpProxyCacheServer proxy;

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

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


activity中

// 2.长视频测试缓存下载机制
        String VIDEO_URL = "http://vfx.mtime.cn/Video/2017/03/31/mp4/170331093811717750.mp4";
        HttpProxyCacheServer proxy = Application.getProxy();
        String proxyUrl = proxy.getProxyUrl(VIDEO_URL);
        try {
            videoPlayer.load(proxyUrl);
        } catch (IOException e) {
            Toast.makeText(this,"播放失败",Toast.LENGTH_SHORT);
            e.printStackTrace();
        }

缓存位置:

AndroidVideoCache研究_第1张图片

02. AndroidVideoCache原理

在一般的播放器请求数据的模型中,播放器直接通过url连接到远程服务器,播放器下载后的数据直接交给播放器缓冲区,数据使用完了以后直接淘汰掉。
AndroidVideoCache研究_第2张图片

如果我们在播放器与远程server中间插入一个本地透明代理,这样透明代理就可以接管播放器的请求,透明代理从远程server下载完数据就可以先保存在本地,然后把所需要的数据交给播放器。类似于我们Charles抓包这样。下一次播放器请求相同的数据,就可以在本地代理这里找到对应的缓存文件,直接返回。
AndroidVideoCache研究_第3张图片

03. AndroidVideoCache代码架构梳理

在看代码前,先说下它的整个设计思路,大体可以理解成两部分,这也是我看完后自己的理解:

1、开启一个线程池去给定的路径下下载文件,将下载的文件保存到本地;

2、视频播放的时候读保存到本地的文件,如果播放的地方还没保存到本地,那就需要等待视频下载到这个地方才能播放;

上面这种情况是边播边缓存,如果在已经缓存好去播视频时,这时执行的逻辑就是直接播放本地视频了;

待todo
可以通过debug追踪代码实现

04.参考资料

AndroidVideoCache-视频边播放边缓存的代理策略
https://www.jianshu.com/p/4745de02dcdc

AndroidVideoCache源码详解以及改造系列-源码篇
https://www.jianshu.com/p/dfc18278b053

AndroidVideoCache解析
https://blog.csdn.net/zhqw_csdn/article/details/81514313

视频缓存AndroidVideoCache攻略
https://www.jianshu.com/p/53c4a6c9bd07

你可能感兴趣的:(播放器)