我目前正在尝试将加密的HLS流下载到iOS设备。 iOS 10似乎开箱即用地支持该功能(请参阅https://developer.apple.com/videos/play/wwdc2016/504),但我无法使其正常工作。
我基本上是使用Apple示例代码(https://developer.apple.com/library/content/samplecode/HLSCatalog/Introduction/Intro.html)中的AssetPersistenceManager,该示例代码称为makeAssetDownloadTaskAVAssetDownloadURLSession。它在联机模式下工作正常,但是从存储的文件中播放 Assets 时播放失败。

现在,WWDC视频指示您应该使用AVAssetResourceLoaderDelegate提供脱机加密密钥。由于AVAssetResourceLoader似乎不支持http和https(例如参见AVAssetResourceLoaderDelegate methods not working on device),因此我尝试对密钥URI使用自定义方案,并在shouldWaitForLoadingOfRequestedResourceAVAssetResourceLoaderDelegate中提供本地aes密钥。在这里,它在联机流式传输时也可以使用,但是无论我使用的是远程密钥URL还是使用本地密钥覆盖它,AVPlayer始终都无法离线播放AVAset。

是否有人有下载加密的HLS的经验,或者有一个有效的示例,说明如何提供加密密钥以离线播放本地加密的AVURLAsset?

我正在使用的示例HSL文件在这里:http://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-aes.ism/.m3u8

最佳答案

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

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

  • XXXXX.m3u8
  • 播放列表XXXXXXXXXX.data

  • 在两个文件中都有一行
    #EXT-X-KEY:METHOD=AES-128,URI="XXXXXX",IV=XXXXXXXXX
    

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

    而已!现在,您可以从本地获取密钥并正常播放。

    07-28 02:37
    查看更多