hzz9600 / VideoCacheSample

Todo - 基于AndroidVideoCache 实现短视频秒加载边下边播;M3u8支持
18 stars 7 forks source link

m3u8请求每次都读了本地缓存文件了 #1

Closed xubigshu closed 2 years ago

xubigshu commented 2 years ago
public String getProxyUrl(String url, boolean allowCachedFileUri) {
    if (allowCachedFileUri && isCached(url) && !M3u8ProxyUtil.isM3u8Url(url)) {//m3u8始终走代理
        File cacheFile = getCacheFile(url);
        touchFileSafely(cacheFile);
        return Uri.fromFile(cacheFile).toString();
    }
    return isAlive() ? appendToProxyUrl(url) : url;
}

“m3u8始终走代理”这个本意是m3u8每次都发起一次真正的网络请求呢?而不仅仅是读取本地缓存。

hzz9600 commented 2 years ago

是的。m3u8地址是不变的,跟正常的其它媒体文件地址一样,是缓存到本地。本地的内容和服务器上的m3u8一样,你可以在sdcard外部存储私有目录下(/Android/data/[app_package_name]/cache/video-cache/)里面看到下载下来的m3u8文件内容,是没有做任何修改的,通过本地代理会把m3u8里面的分片地址改成本地的,debug模式下可以看打印响应到播放器的m3u8的内容。

hzz9600 commented 2 years ago
public String getProxyUrl(String url, boolean allowCachedFileUri) {
    if (allowCachedFileUri && isCached(url) && !M3u8ProxyUtil.isM3u8Url(url)) {//m3u8始终走代理
        File cacheFile = getCacheFile(url);
        touchFileSafely(cacheFile);
        return Uri.fromFile(cacheFile).toString();
    }
    return isAlive() ? appendToProxyUrl(url) : url;
}

“m3u8始终走代理”这个本意是m3u8每次都发起一次真正的网络请求呢?而不仅仅是读取本地缓存。

这段代码只是强制让m3u8地址走本地代理,不然和其它媒体地址一样缓存好返回file://是不对的,如果m3u8也直接返回file://就没法用到代理服务去缓存ts文件了