gpt4 book ai didi

ios - AVQueuePlayer 需要很多时间来播放第一首歌曲

转载 作者:行者123 更新时间:2023-11-30 12:43:10 26 4
gpt4 key购买 nike

下面是我用一些网址播放 AVQueueplayer 的代码,但播放第一首歌曲几乎需要 10-20 秒。我有 10 首歌曲,但为了引用和精简,我在这里只保留了一首歌。

    arrSongs = ["http://radiotaj.com/music/1/1836.mp3"]
let index = 0
let strSong = (arrSongs.object(at: index)) as? String
playerItem = AVPlayerItem(url: URL(string:strSong!)!
let playerItems = [playerItem]
player = AVQueuePlayer(items : playerItems as! [AVPlayerItem])
player.play()

以下是我已经尝试过的解决方案

  1. 添加 CMTime
  2. 暂停并再次播放
  3. 如果文件是本地的,它就可以正常工作。

非常感谢任何帮助。

谢谢!

最佳答案

您可以尝试以下代码,它对我有用。这是没有 Alamofire 的版本(将 yourURL 替换为实际链接):

override func viewDidLoad() {
super.viewDidLoad()
downloadFileFromURL(url: URL(string: yourURL)!)
}

func play(url: URL) {
do {
let songData = try Data(contentsOf: url, options: NSData.ReadingOptions.mappedIfSafe)
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
player = try AVAudioPlayer(data: songData, fileTypeHint: AVFileTypeAppleM4A)
player!.prepareToPlay()
player!.play()
} catch {
print(error)
}
}


func downloadFileFromURL(url: URL) {
var downloadTask = URLSessionDownloadTask()
downloadTask = URLSession.shared.downloadTask(with: url, completionHandler: {
customURL, response, error in

self.play(url: customURL!)
})
downloadTask.resume()
}

使用 Alamofire 速度更快,它基本上将文件下载到 Documents 文件夹中并从这里播放(不要忘记安装 Alamofire 并在类外部输入 import Alamofire:

func play(url: URL) {
do {
let songData = try Data(contentsOf: url, options: NSData.ReadingOptions.mappedIfSafe)
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
player = try AVAudioPlayer(data: songData, fileTypeHint: AVFileTypeAppleM4A)
player!.prepareToPlay()
player!.play()
} catch {
print(error)
}
}

override func viewDidLoad() {
super.viewDidLoad()
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
var documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
documentsURL.appendPathComponent("song."+"mp3")
return (documentsURL, [.removePreviousFile])
}

Alamofire.download(yourURL, to: destination).response { response in
if response.destinationURL != nil {
songURL = response.destinationURL!
self.play(url: songURL!)
}
}
}

关于ios - AVQueuePlayer 需要很多时间来播放第一首歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41998863/

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