我目前正在尝试将加密的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
,该示例代码称为makeAssetDownloadTask
的AVAssetDownloadURLSession
。它在联机模式下工作正常,但是从存储的文件中播放 Assets 时播放失败。
现在,WWDC视频指示您应该使用AVAssetResourceLoaderDelegate
提供脱机加密密钥。由于AVAssetResourceLoader
似乎不支持http和https(例如参见AVAssetResourceLoaderDelegate methods not working on device),因此我尝试对密钥URI使用自定义方案,并在shouldWaitForLoadingOfRequestedResource
的AVAssetResourceLoaderDelegate
中提供本地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”。在该文件夹中,有两个文件需要修改。
在两个文件中都有一行
#EXT-X-KEY:METHOD=AES-128,URI="XXXXXX",IV=XXXXXXXXX
用您的本地密钥位置URL替换URI
而已!现在,您可以从本地获取密钥并正常播放。