使用avplayer播放音频时如何将音频缓存到本地

Leo*_*Leo 5 ios avplayer avurlasset avasset swift

我使用 AVPlayer 在线播放音频,并希望在 avplayer 完成加载流时将音频数据/流保存到本地。

我按如下方式实现它:

    let fileUrl =  NSURL(string: strUrl)!
    let asset = AVURLAsset(URL: fileUrl)
    asset.resourceLoader.setDelegate(self, queue:dispatch_queue_create("AVARLDelegateDemo loader", nil))
    self.pendingRequests = [AVAssetResourceLoadingRequest]()

    asset.loadValuesAsynchronouslyForKeys(["playable"]){
        dispatch_async( dispatch_get_main_queue()){
            self.prepareToPlayAsset(asset, requestedKeys: ["playable"])
        }
    }


  func resourceLoader(resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool {
    .......
    return false
}
Run Code Online (Sandbox Code Playgroud)

当 url 为http/https 时,它不调用resourceLoader(resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource .... - 当 url 是自定义的(例如:'test')时,它调用resourceLoader(resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource...

谁知道原因,resourceLoader不支持http/https吗?

vlm*_*nkv 3

当播放器不知道如何加载文件时,它会调用resourceLoader(resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource...方法。因此,由于它知道如何加载 URL,因此它不会调用此方法,因此您必须传递自定义 URL。