关闭音频播放?

问题描述 投票:1回答:1

我正在使用AVPlayer播放来自URL的音频。一切正常,但我不知道如何停止当前音频播放当我在一个不同的ViewController我不想在player.pause()中调用viewWillDisappear()因为我想在特定情况下停止它,但我仍然想要播放应用处于非活动状态时,后台播放音频。

当应用程序处于非活动状态时,我在Xcode应用程序设置中打开了背景播放功能qazxsw poi

第二个问题:我可以改进这门课还是一切都好吗?

enter image description here
ios iphone xcode avfoundation swift4.2
1个回答
2
投票

您需要一种与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 } } } 对象通信的机制,以便对其执行操作。 有很多方法可以解决这个问题。

就个人而言,我会为玩家创建一个专门的类来处理实例化,加载音频资源,播放,暂停等。 然后我要么让这个类成为一个单例,所以我可以从任何地方访问它,或者将它注入并传递给将要使用它的其他类。

Basic Example:

player

从app中的任何位置发送操作:

class MyAudioPlayer {
    static let shared = MyAudioPlayer()

    private var player: AVAudioPlayer?

    func load(_ url: URL) {
        player = try? AVAudioPlayer(contentsOf: url)
    }

    func play(url: URL) {
        load(url: url)
        player?.play()
    }

    func pause() {
        player?.pause()
    }

    func stop() {
        player?.stop()
    }     
}

至于在后台玩,即使应用程序不活跃也需要(可能在MyAudioPlayer.shared.play(someURL) MyAudioPlayer.shared.pause()

AppDelegate
© www.soinside.com 2019 - 2024. All rights reserved.