You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AVPlayer仅在CoreData数据库重新播种后才可播放视频的问题排查

问题:AVPlayer读取现有CoreData中的URL无法播放,重新播种数据库后恢复正常

我用以下4个函数管理AVPlayer按顺序播放视频列表:

func setupPlayer(path : String?) {
    var url = currentVid!.url! //path ?? currentVid!.url!
    print("setting up player")
    self.player = AVPlayer(url: URL(fileURLWithPath: url))
    self.playerLayer = AVPlayerLayer(player: self.player)
    self.videoPlayer!.layer.addSublayer(self.playerLayer!)
    self.playerLayer!.frame = view.frame
    videoPlayer!.isHidden = false
    self.player!.play()
    NotificationCenter.default.addObserver(self, selector: #selector(videoUpdate), name: Notification.Name.AVPlayerItemDidPlayToEndTime, object: self.player!.currentItem)
}

@objc func videoUpdate(start : Bool = false) {
    videoPlayer?.isHidden = false
    setCurrentVid()
    setupPlayer(path: currentVid?.url)
    self.player?.play()
    print ("update ended")
}

func updateCurrentPath() {
    currentPath = currentPath == nil ? 0 : currentPath! + 1
    currentPath = currentPath! % currentVideos!.count
    print("currentPath updated to \(currentPath)")
}

func setCurrentVid(updating: Bool = true) -> DBVideo {
    if updating {
        updateCurrentPath()
    }
    currentVid = currentVideos![currentPath!]
    panel?.highlightIndicator(currentPath!)
    return currentVideos![currentPath!]
}

AVPlayer获取的URL字符串是从CoreData实体字段中检索到的,且确认字符串正确。但出现了奇怪的现象:如果删除数据库并从.yaml文件重新播种CoreData,播放器可以正常工作;但直接读取现有数据库的数据时,视频无法播放。

我已经通过调试和日志确认,两种场景下创建AVPlayer时传入的字符串完全一致。尝试过移除并重新创建playerLayer和player,问题依旧存在。

数据来源的实体关系是:Curriculum包含Assignment,Assignment包含Challenges,Challenges是Videos集合的来源,Videos就是存储URL字符串的实体。明明字符串已经正确传递给AVPlayer,却无法播放,这让我十分困惑。


更新:添加AVPlayer currentItem检查代码

修改后的videoUpdate函数:

@objc func videoUpdate(start : Bool = false) {
    videoPlayer!.isHidden = false
    setCurrentVid()
    setupPlayer(path: currentVid?.url)
    print("player current item \(player?.currentItem)")
    self.player!.play()
    print ("update ended")
}

输出日志:

setting up player
player current item Optional(<AVPlayerItem: 0x600000024d70, asset = <AVURLAsset: 0x60000029ea20, URL = file:///Users/dandonaldson/Library/Developer/CoreSimulator/Devices/05DB48E2-AA3B-445E-A982-B8B708006B27/data/Containers/Bundle/Application/1176693C-90F4-4AFB-9DD8-74F6819B9BA5/VideoMentor.app/move%20with%20numbers.mov>>)
update ended

内容的提问来源于stack exchange,提问作者Dan Donaldson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:22:46