ios - AVPlayer 暂停后不会继续播放

标签 ios swift avplayer avaudiosession nsnotifications

我刚刚从 AVAudioPlayer 切换到 AVPlayer,我正在检查我的旧功能并进行适当的调整。 AVPlayer 用于使用 URL 播放远程音频文件。当我选择要播放和暂停的文件时,一切正常。但是,当我想继续播放暂停的文件时,即使我看到正在调用播放功能,播放器也不会播放。我设置了一个观察者来知道玩家何时完成播放,以便播放/暂停按钮可以切换,我注意到观察者在我按下暂停后被调用。这不应该发生,因为玩家还没有玩完对吗?不管怎样,我设置了断点,一切都被正确调用了。知道为什么 AVPlayer 在暂停后不会继续播放吗?

var playerItem: AVPlayerItem?
var newPlayer: AVPlayer?
var trackIDplaying: Int?

func playPausePressed(_ sender:UIButton) 
{

    if let selectedTrackID = trackIDplaying
    {

         do 
         {

            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            try AVAudioSession.sharedInstance().setActive(true)

            if selectedTrackID == track.trackId
            {
                //if playing, then pause.  If not playing, then play
                if (self.newPlayer!.rate != 0)
                {
                    self.newPlayer!.pause()
                    self.isPaused = true   
                }
                else
                {
                    if self.newPlayer!.currentItem != nil
                    {
                        self.newPlayer!.play()
                        print(self.newPlayer!.currentItem)
                    }
                }
            }
            else
            {
                //If song is playing, switch to new song
                let trackURL = URL(string: track.preSignedURL!)
                trackIDplaying = track.trackId
                self.playerItem = AVPlayerItem(url: trackURL!)
                NotificationCenter.default.addObserver(self, selector: #selector((HomeController.playerDidFinishPlaying)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.playerItem)
                self.newPlayer = AVPlayer(playerItem: self.playerItem!)
                self.newPlayer!.play()
            }
         }
         catch let error1 as NSError 
         {
            error = error1
            self.newPlayer = nil
         }
    }
    else 
    {
         do 
         {
             //play selected song if no other songs are playing
            let trackURL = URL(string: track.preSignedURL!)
            print(trackURL!)
            self.playerItem = AVPlayerItem(url: trackURL!)
            NotificationCenter.default.addObserver(self, selector: #selector((HomeController.playerDidFinishPlaying)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.playerItem)

            self.newPlayer = AVPlayer(playerItem: self.playerItem!)
            self.newPlayer!.play()
            self.trackIDplaying = track.trackId
         }
    }
    if let err = error 
    {
         print("audio player error \(err.localizedDescription)", terminator: "")
    }
}

func playerDidFinishPlaying(note: NSNotification) {

    guard let indexPath = self.playingAudioIndexPath, let cell = self.audioTable.cellForRow(at: indexPath) as? AudioCell else {

        return;
    }

    cell.playButton.isSelected = false
    self.playingAudioIndexPath = nil

}

最佳答案

尝试仅在 viewDidLoad()viewWillAppear() 中添加观察者 对于这类问题,添加观察者应该一次性完成。 如果您还有任何问题,请随时问我。

关于ios - AVPlayer 暂停后不会继续播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40077975/

相关文章:

ios - 快速获取 NSManagedObject 类实例的副本

swift - 如何在 Swift 中检测 UITableViewCell 的 UIImageView 上的触摸?

ios - 通过点击 X 按钮识别 AVPlayerViewController 何时关闭

ios - 如何使用 Alamofire 为 http 请求编写单元测试?

iphone - 使用 SBJSON 进行 JSON 解析和检查

ios - 如何将输入的数据从 UITextField 永久显示到 Label?

swift - 以编程方式在导航栏中嵌入分段控件

ios - 下载文件导致在 ios 中流式传输的问题

swift - 检测 AVPlayer 视频开始停止事件

ios - 在 objective-c 中填充一组自定义模型崩溃