【问题标题】:AVPlayerItem from URL not playing来自 URL 的 AVPlayerItem 未播放
【发布时间】:2016-11-08 14:17:02
【问题描述】:

我正在尝试从使用 Alamofire 下载的数据文件中播放 mp3。这首歌很好,我可以用 AVAudioPlayer(data: Data) 播放它。我应该如何使用 AVPlayer 播放相同的数据文件?我找不到如何从数据创建 PlayerItem 或从数据创建 AVAsset。 另外,我有歌曲路径的 url,但该 URL 不适用于 AVPlayer。只是没有播放音乐。

func startSong(withIndex: Int) {
    if let item = getItem(atIndex: withIndex) {
        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            print("AVAudioSession Category Playback OK")
            do {
                try AVAudioSession.sharedInstance().setActive(true)
                print("AVAudioSession is Active")
            } catch let error as NSError {
                print(error.localizedDescription)
            }
            let playerItem = item
            self.player = AVPlayer(playerItem: playerItem)
        } catch let error as NSError {
            print(error.localizedDescription)
        }
    }
}

func getItem(atIndex: Int) -> AVPlayerItem? {

    var item: AVPlayerItem

    var url: URL

    let song = playlist.getSong(index: atIndex)

    if PlaylistsService.sharedService.isFileDownloaded(inPath: SongPath.Offline(id: (song?.getID())!).path()) {
        url = URL(fileURLWithPath: SongPath.Offline(id: (song?.getID())!).path())
    } else if PlaylistsService.sharedService.isFileDownloaded(inPath: SongPath.Temp(id: (song?.getID())!).path()) {
        url = URL(fileURLWithPath: SongPath.Temp(id: (song?.getID())!).path())
    } else {
        self.downloadSong(song: song!)
        url = URL(fileURLWithPath: SongPath.Temp(id: (song?.getID())!).path())
    }

    item = AVPlayerItem(url: url)

    return item
}

@IBAction func playPause(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
    if sender.isSelected {
        print("Play")
        self.player.play()
    } else {
        print("Pause")
        self.player.pause()
    }
}

【问题讨论】:

  • self.player.play() 上设置断点。那条线真的执行了吗?
  • 是的。 prntscr.com/d4njv4
  • 好的,在您说self.player.play() 时,您可以尝试记录一些有关播放器状态的更多信息。它的currentTime 是什么?它的currentItem 是什么?如果它有一个项目,那个项目的status 是什么?那个项目的asset是什么?
  • 它打印出正确的信息:prntscr.com/d4nnmm
  • 在您记录status 的位置,请改为记录status.rawValue。这将在控制台中为我们提供一个我们可以实际读取的值。我们真的很想知道这件事是否存在status 问题。

标签: ios swift avplayer avplayeritem


【解决方案1】:

刚刚发现 AVPlayerItem 无法从指向数据文件的 URL 创建对象。例如,您需要具有文件扩展名“.mp3”的 URL。当我将扩展添加到下载和播放路径时,现在一切正常。

【讨论】:

  • 是的,当我看到这个文件的数字名称时,我应该知道这一点。抱歉,我没听清楚。
  • 有同样的问题;添加文件扩展名修复它。奇怪的是,它似乎在没有文件扩展名的情况下在今天之前就可以工作。我对此没有任何解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
相关资源
最近更新 更多