gpt4 book ai didi

ios - AvQueuePlayer 不在 iPhone 上播放音频,只能在模拟器上工作

转载 作者:行者123 更新时间:2023-11-29 01:18:26 26 4
gpt4 key购买 nike

我已将音频文件添加到我的 Xcode 项目中,以便我可以使用 AvQueuePlayer(AVPlayer 的子类)在本地播放它们。为了做到这一点,我必须创建一个 [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() 的按钮,-- 应用程序会在该行崩溃,我认为这是由于 queuePlayer 没有任何项目可以播放。

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

最佳答案

问题是这一行:

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

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

令我惊讶的是这在模拟器上有效,事实上它确实可以被合理地认为是一个错误。

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

关于ios - AvQueuePlayer 不在 iPhone 上播放音频,只能在模拟器上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34885878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com