【发布时间】:2019-03-07 18:00:30
【问题描述】:
我正在使用AVPlayer 播放来自URL 的音频。一切正常,但是当我在不同的ViewController 中时,我不知道如何停止当前的音频播放我不想在viewWillDisappear() 中调用player.pause(),因为我想在特定情况下停止它,但是当应用处于非活动状态时,我仍希望在后台播放音频。
当应用处于非活动状态时,我在 Xcode 应用设置中开启了后台播放
第二个问题:我可以改进这门课还是一切都好?
protocol AVPlayerServiceDelegate {
func playerDidUpdateCurrentPlayingTime(_ time: CMTime)
}
class AVPlayerService {
static let instance = AVPlayerService()
private var audioPlayer: AVPlayer!
public weak var delegate: AVPlayerServiceDelegate?
func setupPlayer(forURL url: URL) {
let playerItem: AVPlayerItem = AVPlayerItem(url: url)
audioPlayer = AVPlayer(playerItem: playerItem)
audioPlayer.play()
audioPlayer.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, preferredTimescale: 1), queue: DispatchQueue.main) { (CMTime) -> Void in
if self.audioPlayer.currentItem?.status == .readyToPlay {
self.delegate?.playerDidUpdateCurrentPlayingTime(self.audioPlayer.currentTime())
}
}
}
var isPlaying: Bool {
return audioPlayer.isPlaying
}
var isPaused: Bool {
return audioPlayer.isPaused
}
var rate: Float {
return audioPlayer.rate
}
func seek(to time: CMTime) {
audioPlayer.seek(to: time)
}
func seekToBeginning() {
audioPlayer.seek(to: CMTimeMake(value: 0, timescale: 1))
}
func replay() {
audioPlayer.seek(to: CMTimeMake(value: 0, timescale: 1))
audioPlayer.play()
}
func pause() {
if let audioPlayer = audioPlayer {
audioPlayer.pause()
}
}
func play() {
audioPlayer.play()
}
func freshInstance() {
audioPlayer = AVPlayer()
}
var assetDuration: CMTime {
get {
return audioPlayer.currentItem!.asset.duration
}
}
}
【问题讨论】:
标签: ios iphone xcode avfoundation swift4.2