What is error -12865 when trying to play a video?

Hello,

I'm trying to play a stream video after I downloaded it using a AVAssetDownloadURLSession and aggregateAssetDownloadTask.

When I initialise the AVPlayerItem with the AVURLAsset saved locally in the bookmarks it get the -12865 error. What does this code stands for?

If I play the video directly from the stream it works fine.

This is the code that saves the asset:

Code Block /// Tells the delegate that the task finished transferring data.
    func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
        let userDefaults = UserDefaults.standard
        /*
         This is the ideal place to begin downloading additional media selections
         once the asset itself has finished downloading.
         */
        guard let task = task as? AVAggregateAssetDownloadTask,
            let asset = activeDownloadsMap.removeValue(forKey: task) else { return }
        guard let downloadURL = willDownloadToUrlMap.removeValue(forKey: task) else { return }
        // Prepare the basic userInfo dictionary that will be posted as part of our notification.
        var userInfo = [String: Any]()
        userInfo[Asset.Keys.name] = asset.name
        if let error = error as NSError? {
            switch (error.domain, error.code) {
            case (NSURLErrorDomain, NSURLErrorCancelled):
                /*
                 This task was canceled, you should perform cleanup using the
                 URL saved from AVAssetDownloadDelegate.urlSession(_:assetDownloadTask:didFinishDownloadingTo:).
                 */
                guard let localFileLocation = localAsset(withName: asset.name)?.urlAsset.url else { return }
                do {
                    try FileManager.default.removeItem(at: localFileLocation)
                    userDefaults.removeObject(forKey: asset.name)
                } catch {
                    print("An error occured trying to delete the contents on disk for \(asset.name): \(error)")
                }
                userInfo[Asset.Keys.downloadState] = Asset.DownloadState.notDownloaded.rawValue
            case (NSURLErrorDomain, NSURLErrorUnknown):
                fatalError("Downloading HLS streams is not supported in the simulator.")
            default:
                fatalError("An unexpected error occured \(error.domain)")
            }
        } else {
            do {
                let bookmark = try downloadURL.bookmarkData()
                userDefaults.set(bookmark, forKey: asset.name)
            } catch {
                print("Failed to create bookmarkData for download URL.")
            }
            userInfo[Asset.Keys.downloadState] = Asset.DownloadState.downloaded.rawValue
            userInfo[Asset.Keys.downloadSelectionDisplayName] = ""
        }
        NotificationCenter.default.post(name: .AssetDownloadStateChanged, object: nil, userInfo: userInfo)
    }
    /// Method called when the an aggregate download task determines the location this asset will be downloaded to.
    func urlSession(_ session: URLSession, aggregateAssetDownloadTask: AVAggregateAssetDownloadTask,
                    willDownloadTo location: URL) {
        /*
         This delegate callback should only be used to save the location URL
         somewhere in your application. Any additional work should be done in
         `URLSessionTaskDelegate.urlSession(_:task:didCompleteWithError:)`.
         */
        willDownloadToUrlMap[aggregateAssetDownloadTask] = location
    }


and this one get's the asset back

Code Block let userDefaults = UserDefaults.standard
        guard let localFileLocation = userDefaults.value(forKey: name) as? Data else { return nil }
        
        var bookmarkDataIsStale = false
        do {
            let url = try URL(resolvingBookmarkData: localFileLocation,
                                    bookmarkDataIsStale: &bookmarkDataIsStale)
            if bookmarkDataIsStale {
                fatalError("Bookmark data is stale!")
            }
            
            return AVURLAsset(url: url)
        } catch {
            fatalError("Failed to create URL from bookmark with error: \(error)")
        }



Thank you

Hey, @rbanear, were you able to know what was causing that problem?

I am experiencing the same error.

AVPlayer.currentItem?.status == AVPlayerItem.Status.failed

Error: The operation couldn’t be completed. (CoreMediaErrorDomain error -12865.)

This only happens to some of our users, with various iOS versions, namely: 16.1.1, 16.7.8, 17.2.1

These are m4a urls hosted by Apple Servers via an API call to Apple Music API. Urls are music previews.

What is error -12865 when trying to play a video?
 
 
Q