首页 文章

iOS 10下载加密的HLS流

提问于
浏览
6

我目前正在尝试将加密的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 . 它在在线模式下工作正常,但从存储的文件播放资源时播放失败 .

现在,WWDC视频表明您应该使用 AVAssetResourceLoaderDelegate 来提供脱机加密密钥 . 由于 AVAssetResourceLoader 似乎不支持http和https(请参阅例如AVAssetResourceLoaderDelegate methods not working on device),我尝试使用自定义方案作为密钥URI,并在 shouldWaitForLoadingOfRequestedResource 中提供本地aes密钥 AVAssetResourceLoaderDelegate . 这里也适用于在线流媒体,但无论我是使用远程密钥URL还是使用本地密钥覆盖它,AVPlayer始终无法离线播放AVAsset .

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

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

1 回答

  • 1

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

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

    • XXXXX.m3u8

    • PlayListXXXXXXXXXX.data

    在这两个文件中,都有一行

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

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

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

相关问题