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

标签 ios swift avplayer avasset avurlasset

我用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
}

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

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

最佳答案

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

关于ios - 使用avplayer播放音频时如何将音频缓存到本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33518463/

相关文章:

ios - 从后台更新应用程序

ios - 当应用程序重新启动到后台时,是否会调度主队列?

ios - 如何选择系统键盘作为textField的唯一输入键盘类型?

ios - 如何在不破坏功能的情况下控制 Storyboard 中的AVPlayer subview

ios - iphone 应用程序因内存压力而崩溃

ios - 使用谓词获取总是返回 nil

ios - 如何快速播放 mp4 音频文件?

ios - 将 AVPlayerViewController 嵌入到 UIView 中

iphone - 如何弄清楚使用的 SEL 名称是什么

ios - Facebook 中的外部链接在 WKWebView 中不起作用。知道如何解决这个问题吗?