根本问题
iOS中寻求视频时,我们的视频缓冲很多。 它比我们的Web播放器缓冲了更多,后者在临时存储中保存已观看过的片段的副本。
期望解决方案
在设备磁盘上缓存视频片段。 我们可以只缓存单一质量并不断重播。
阻碍因素
我们找不到在AVFoundation / AVPlayer中执行缓存的方法。
我们尝试过什么
使用AVPlayer拦截网络请求的两种方法:
- 符合AVAssetResourceLoaderDelegate并手动处理媒体加载。
对于HLS不起作用。 您可以通过实现AVAssetResourceLoaderDelegate来加载m3u8文件,这允许您传递身份验证或解密响应,但无法加载.ts文件。 这是我们尝试的代码:https://gist.github.com/nathanhillyer/84e46152d7c4c88183b6
- 实施NSURLProtocol以捕获对
.ts
文件的请求。
AVURLAsset实际上避免被拦截。 不知何故,网络请求不会被捕获(原因未知)。
.ts
文件。@narohi - 你解决了这个问题吗?我也非常想在磁盘上缓存HLS片段。很高兴在浪费时间之前发现它行不通。现在我倾向于放弃AVPlayer
,通过解析m3u8
播放列表并使用AVQueuePlayer
编写自己的HLS播放器。JWPlayer SDK for iOS看起来很有前途,但他们的“联系我们获取我们的年度合同定价”听起来有点可怕。 - ndbroadbent