我正在开发一款iOS应用,可根据iOS 10
最新功能离线HLS下载 m3u8视频并播放离线
我尽力保护{strong} CDN 上HTTP Live Stream
格式的视频。
每个视频都有多个比特率,因此HLS
文件由一个主m3u8清单组成,该清单指向多个子清单文件,这些文件又指向ts
个文件(传输流)。
所以我需要将此CDN令牌附加到主m3u8,子清单m3u8和.ts
文件的URL。令牌有效期为60秒,因此需要刷新,当前令牌应附加URL。
我该怎么做?
我尝试了这个,但它只附加到m3u8。
我的代码:
var components = URLComponents(string: playUrl)
let token = URLQueryItem(name: "token", value: CDNTokenManager.getCDNToken())
components?.queryItems = [token]
let url = components?.url
let asset = AVURLAsset(url: url!)
let downloadTask = downloadURLSession.makeAssetDownloadTask(asset: asset,
assetTitle: "title",
assetArtworkData: nil,
options: nil)
downloadTask?.resume()
答案 0 :(得分:0)
据我所知,iOS没有提供修改m3u8文件中的URL的任何内容。它将检索它们而不做任何更改。所以我认为你不能完全在客户端解决这个问题。
除了客户端代码之外,您还需要在服务器端实现一个Web应用程序,该应用程序根据需要生成m3u8文件并添加CDN令牌。
例如,iOS客户端在https://cdn.com/master/fk29x8.m3u8?token=12345请求主文件,Web应用程序动态生成包含https://cdn.com/sub/fk29x8-1280x720-1823.m3u8?token=12345等URL的文件。该网址再次由网络应用提供,其中包含https://cdn.com/stream/fk29x8-1280x720-1823/mp4-123.ts?token=12345等网址。
因此,Web应用程序的任务基本上是读取模板文件,并将令牌值替换为请求的URL中给定的on。