【发布时间】:2019-10-05 08:57:39
【问题描述】:
我正在使用 AVFoundation 在颤振中开发一个音乐播放器插件,我想在 iOS 和 Android 上创建一个统一的界面。
我想捕获AVPlayer 可能引发的错误,例如,给定的AVPlayerItem 无效(包含不受支持的文件的URL,如png 文件)。
我希望AVPlayer.replace() 抛出异常或更改AVPlayerItem 或AVPlayer 的状态,或者至少在NSNotificationCeter 上发出一些相关通知。我尝试听/观察所有这些,但没有一个报告任何类型的错误。事实上,AVPlayer 报告了“ready-to-play”状态。
mediaPlayer = AVPlayer();
playerItem = AVPlayerItem(url: URL(fileURLWithPath: Bundle.main.path(forResource: "image", ofType: "png")!))
playerItem?.addObserver(self, forKeyPath: #keyPath(AVPlayerItem.status), options: [.old, .new], context: &playerItemContext)
mediaPlayer?.addObserver(self, forKeyPath: #keyPath(AVPlayer.status), options: [.old, .new], context: &mediaPlayerContext)
mediaPlayer?.replaceCurrentItem(with: playerItem); // this changes player status to - "ready-to-play"
mediaPlayer?.play() // this does not report anything
我是一名 Android 开发人员,无法理解 AVPlayer 的工作原理。我怎样才能做到这一点?
注意:我不能使用AVAudioPlayer,因为文档说在播放来自网络或可能有延迟的来源的音乐时不应该使用它。
self.mediaPlayer?.replaceCurrentItem(with: nil)
self.mediaPlayer?.play()
即使这段代码也不会产生错误
【问题讨论】:
-
这与AVPlayer无关。如果媒体播放器本身为 nil,
self.mediaPlayer?.play()什么都不做。该行代码只是中止。那么它怎么可能产生错误呢?这不是 Swift 的工作方式。 -
可以观察avplayer的
current item和error属性 -
@matt 问题已被编辑。
标签: ios swift xcode avfoundation avplayer