AvQueuePlayer不在iPhone上播放音频,仅在模拟器上工作

时间:2016-01-19 19:59:23

标签: ios swift audio avfoundation avqueueplayer

我已将音频文件添加到我的Xcode项目中,以便我可以使用AvQueuePlayerAVPlayer的子类)在本地播放它们。为了做到这一点,我必须创建一个[AVPlayerItems]数组,然后提供给AVQueuePlayer按顺序播放...这是我的代码......

override func viewDidLoad() {

//fills songNameArray with the appropriate part of file name, example: print(songNameArray[0]) -> prints -> "SongName.mp3"
   let path = NSBundle.mainBundle().resourcePath!
  let songFiles = try! NSFileManager.defaultManager().contentsOfDirectoryAtPath(path)
    for item in songFiles {
        if item.hasSuffix("mp3") {
            songNameArray.append(item)
            print("appended to songNameArray \(item)")
        }
    }

 //iterates thru songNameArray and uses combineStrings method to form fullSongPath//
    for i in 0...songNameArray.count - 1 {
        fullSongPaths.append(combineStrings(songNameArray[i]))
        print("here are the full song paths \(fullSongPaths[i])")
    }

 func combineStrings(songName: String) -> String {
    let fullSongPath = ("/Users/username/Desktop/Xcode Projects Folder/LocalAudioPlayer/LocalAudioPlayer/" + songName)
    return fullSongPath
    }
}

然后,这是我的didSelectRowAtIndexPath,用户点按一首歌来开始播放......

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

      makePlayerItemsArray()

      queuePlayer = AVQueuePlayer(items: playerItemsArray)
      queuePlayer?.play()
  }

这就是makePlayerItemsArray函数......

    func makePlayerItemsArray () {
       playerItemsArray.removeAll()

       var createdURL = NSURL()
       var createdItem = AVPlayerItem(URL: createdURL)

       for i in 0...fullSongPaths.count - 1 {
           createdURL = NSURL.fileURLWithPath(fullSongPaths[i])
           createdItem = AVPlayerItem(URL: createdURL)
           playerItemsArray.append(createdItem)
       }
   }

这一切都在电脑上完美运行,音频在点击一行后几乎立即开始播放。问题是,当我在我的iPhone上运行它没有音频出来。这首歌永远不会开始播放。并且,当在iPhone上运行时,如果我点击一行 - 然后等待几秒钟 - 然后点击一个调用queuePlayer.currentItem.currentTime()的按钮, - 该应用程序在该行崩溃,我相信这是由于{ {1}}没有任何项目可以玩。

但是,为什么当我在手机上运行时,queuePlayer无法从queuePlayer获取项目...我可以将playerItemsArray?数组的内容打印为以及fullSongPaths的内容,但是queuePlayer不会播放它们......

1 个答案:

答案 0 :(得分:1)

问题在于这一行:

let fullSongPath = ("/Users/username/Desktop/Xcode Projects Folder/LocalAudioPlayer/LocalAudioPlayer/" + songName)

当您手机上时,您无法播放计算机桌面上的歌曲文件。

我很惊讶这种情况在模拟器上起作用,事实上它可以合理地被认为是一个错误。

应用程序包中的文件需要 (这样当你在那里构建并运行它们时,它们会作为应用程序的一部分被复制到手机上),并且你需要通过他们的URL 引用作为应用程序包中的资源(也就是说,相对纯粹是应用程序包,因为它的URL不重要且可以更改)。