ChangbaDevs / KTVHTTPCache

A powerful media cache framework.
MIT License
2.35k stars 435 forks source link

m3u8文件到m3u8文件到ts文件缓存有问题 #173

Open ClayGuitar opened 5 months ago

ClayGuitar commented 5 months ago

使用情况 视频m3u8格式下,访问第一个m3u8链接得到新的m3u8文件然后再播放对应ts文件 如服务器返回https://www.xxxxx.com/xxxxxx.m3u8后访问得到新的文件如下

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3000000,CODECS="mp4a.40.2,avc1.640032",RESOLUTION=1080x1920
video/144c80b2c5934acc9dd5c273b0849505-65b2e042f69eef1a803d747d6e12f34b-video-hd.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=900000,CODECS="mp4a.40.2,avc1.64001f",RESOLUTION=540x960
video/144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld.m3u8

然后再根据对应网速自动选择播放低清高清视频得到如下ts文件

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:3.000000,
144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld-00001.ts
#EXTINF:3.000000,
144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld-00002.ts
#EXTINF:3.000000,
144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld-00003.ts
#EXTINF:3.000000,
144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld-00004.ts
#EXTINF:3.000000,
144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld-00005.ts
#EXTINF:3.000000,
144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld-00006.ts
#EXTINF:3.000000,
144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld-00007.ts
#EXTINF:3.000000,
144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld-00008.ts
#EXTINF:3.000000,
144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld-00009.ts
#EXTINF:3.000000,
144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld-00010.ts
#EXTINF:3.000000,
144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld-00011.ts
#EXTINF:2.360000,
144c80b2c5934acc9dd5c273b0849505-110a0540099f199acda85d6b5a5e6f1d-video-ld-00012.ts
#EXT-X-ENDLIST

如配合AVPlayer使用 调用proxyURLWithOriginalURL 该方法,访问服务器最开始返回m3u8缓存没有问题,但第二个m3u8以及后续ts文件缓存的url 在执行KTVHCHTTPConnection类中67行的代码URLString = URLString.stringByDeletingLastPathComponent;https://前缀会变为https:/前缀,少了一个反斜杠/,导致自己通过completeFilePathWithURL或KTVHCDataLoader这个类提前下载的文件缓存没有用到。

ClayGuitar commented 5 months ago

应该是用错方法了 Apple Document: Note that this method only works with the file paths (not, for example, the string representations of URLs). Apple文档:请注意,此方法仅适用于文件路径(而不是URL的字符串表示)。

But you string is clearly a full URL address, does not belong to the file path, so we will assemble them into a URL, using URL classification URLByDeletingLastPathComponent to intercept 但是你的字符串显然是一个完整的URL地址,不属于文件路径,所以我们将它们组装成一个URL,使用URL分类URLByDeletingLastPathComponent来拦截

ClayGuitar commented 5 months ago

另外还有个问题,就是利用 KTVHCDataLoader 下载ts文件之后虽然缓存在了本地,但是依然用不到本地文件,看代码是因为读这个KTVHCDataUnit的对象时需要判断totalLeng以及completeURL