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
相关产品推荐
相关产品推荐

