带有CDN令牌的HLS - iOS

时间:2016-09-22 05:00:44

标签: ios token hls m3u8

我正在开发一款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()

1 个答案:

答案 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。