AVPlayer 播放错误的视频文件

Posted

技术标签:

【中文标题】AVPlayer 播放错误的视频文件【英文标题】:AVPlayer playing wrong video file 【发布时间】:2022-01-07 12:27:23 【问题描述】:

我遇到了一个奇怪的情况,不知道如何处理这个问题,我正在从 firestorage 下载视频并缓存到设备中以供将来使用,同时后台线程已经在完成它的工作,我正在将视频 url 传递给播放视频的功能。问题是有时 avplayer 正在播放正确的视频,有时会从缓存中获取其他视频 url。

您可以在下面找到代码:

  func cacheVideo(for exercise: Exercise) 
    print(exercise.imageFileName)
    guard let filePath = filePathURL(for: exercise.imageFileName) else  return 
    if fileManager.fileExists(atPath: filePath.path) 
        //  print("already exists")
     else 
        exercise.loadRealURL   (url) in
            print(url)
            self.getFileWith(with: url, saveTo: filePath)
        
    

在此处写入文件

    func getFileWith(with url: URL, saveTo saveFilePathURL: URL) 
    
    DispatchQueue.global(qos: .background).async 
        
        print(saveFilePathURL.path)
        if let videoData = NSData(contentsOf: url) 
            videoData.write(to: saveFilePathURL, atomically: true)
            DispatchQueue.main.async 
                // print("downloaded")
            
         else 
            DispatchQueue.main.async 
                let error = NSError(domain: "SomeErrorDomain", code: -2001 /* some error code */, userInfo: ["description": "Can't download video"])
                print(error.debugDescription)
                
            
        
    

现在使用这个播放视频

func startPlayingVideoOnDemand(url : URL) 
    
    activityIndicatorView.startAnimating()
    activityIndicatorView.isHidden = false
    print(url)
    let cachingPlayerItem = CachingPlayerItem(url: url)
    
    cachingPlayerItem.delegate = self
    cachingPlayerItem.download()
    // cachingPlayerItem.preferredPeakBitRate = 0
    let avasset = AVAsset(url: url)
    let playerItem = AVPlayerItem(asset: avasset)
    let player = AVPlayer(playerItem: playerItem)
    player.automaticallyWaitsToMinimizeStalling = false
    initializeVideoLayer(for: player)
    

任何建议都将受到高度赞赏。

【问题讨论】:

我已经解决了,谢谢 【参考方案1】:

这已解决,因为我用来下载大量视频文件的数据模型是在后台线程中访问的,同时我试图将 url 分配给相同的数据模型类以获取视频并在 avplayer 中播放.因此,这就是问题所在,只需在数据模型中添加一个新属性以分配要立即播放的 url 即可解决。

【讨论】:

以上是关于AVPlayer 播放错误的视频文件的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayer 没有播放本地保存的视频文件

如何使用 avplayer 从文档目录播放视频文件

如何在应用程序包之外的 AVPlayer 中播放视频文件

如何检测 AVPlayer 视频何时结束播放?

在 Cocoa 应用程序上播放视频

ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调