iOS 10下载加密的HLS流

时间:2017-06-07 15:09:49

标签: ios iphone encryption avplayer offline

我目前正在尝试将加密的HLS流下载到iOS设备。 iOS 10似乎支持开箱即用(参见https://developer.apple.com/videos/play/wwdc2016/504),但我无法让它工作。 我基本上使用Apple示例代码AssetPersistenceManager中的makeAssetDownloadTask,该代码调用AVAssetDownloadURLSession AVAssetResourceLoaderDelegate。它在在线模式下工作正常,但从存储的文件播放资源时播放失败。

现在,WWDC视频表明您应该使用AVAssetResourceLoader来提供脱机加密密钥。由于shouldWaitForLoadingOfRequestedResource似乎不支持http和https(请参阅例如https://developer.apple.com/library/content/samplecode/HLSCatalog/Introduction/Intro.html),因此我尝试对密钥URI使用自定义方案,并在AVAssetResourceLoaderDelegate中提供本地aes密钥using Plots pyplot() # chooses pyplot background x = rand(100); y = rand(100) plt1 = plot(x) display(plt1) plt2 = plot(y) display(plt2) 。这里也适用于在线流媒体,但无论我是使用远程密钥URL还是使用本地密钥覆盖它,AVPlayer始终无法离线播放AVAsset。

是否有人有下载加密HLS的经验或有关于如何提供加密密钥以便离线播放本地加密AVURLAsset的工作示例?

我正在使用的示例HSL文件位于:AVAssetResourceLoaderDelegate methods not working on device

2 个答案:

答案 0 :(得分:1)

首先,您需要下载密钥并保存。

第二,下载完HLS后,您将获得一个文件夹名称,例如“ XXXXXX.movpkg”。在该文件夹中,您需要修改两个文件。

  1. XXXXX.m3u8
  2. PlayListXXXXXXXXXX.data

在两个文件中都有一行

#EXT-X-KEY:METHOD=AES-128,URI="XXXXXX",IV=XXXXXXXXX

将URI替换为您的本地密钥位置URL

就是这样!现在您可以从本地获取密钥并正常播放了。

答案 1 :(得分:0)

也许会帮助某人

要离线下载和播放HLS视频,您需要执行以下步骤,

  1. 使用本地服务器(例如GCDServer)来托管m3u8文件下载后的操作。
  2. 如果未在此处下载.ts段,则编辑m3u8文件。
  3. 使用GCDServer本地主机URL托管和播放m3u8文件。

在正在运行的应用中使用它,因此您可以使用这种方法。