使用 AVAudioPlayer 在 Swift 中播放远程 mp3 文件
Posted
技术标签:
【中文标题】使用 AVAudioPlayer 在 Swift 中播放远程 mp3 文件【英文标题】:Using AVAudioPlayer to play remote mp3 file in Swift 【发布时间】:2017-12-13 06:57:46 【问题描述】:我是 Swift 新手,但我想更改我的视图控制器以在我的 ios 应用程序中播放远程 mp3 文件。我从这段代码开始在本地播放一首歌曲,它可以工作(之后为播放器提供功能):
import AVFoundation
class Music1ViewController: UIViewController
//5 -
var songPlayer = AVAudioPlayer()
//15 -
var hasBeenPaused = false
//6 -
func prepareSongAndSession()
do
//7 - Insert the song from our Bundle into our AVAudioPlayer
songPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "localsong", ofType: "mp3")!))
//8 - Prepare the song to be played
songPlayer.prepareToPlay()
查看AVAudioPlayer
documentation 后,.prepareToPlay()
预加载缓冲区,这让我觉得我需要做的就是更改初始化程序以定位 URL。
然后我改变初始化器:
songPlayer = try AVAudioPlayer(contentsOf: URL(string: "https://s3.amazonaws.com/kargopolov/kukushka.mp3")!)
我在 XCode 中没有收到任何错误,但是当我运行它时,我在控制台中看到 Thread 1: EXC_BAD_ACCESS (code=1, address=0x48)
的错误,这让我觉得我正在接近这个错误。
有没有更好的方法来访问远程 mp3 文件?
【问题讨论】:
检查这个:***.com/questions/34563329/… 【参考方案1】:试试这个代码:
您需要将AVKit
和AVFoundation
添加到您的frameworks
路径并导入它们:
import UIKit
import AVKit
import AVFoundation
class ViewController: UIViewController
var player = AVPlayer()
override func viewDidLoad()
super.viewDidLoad()
@IBAction func localPress(_ sender: Any)
let path = Bundle.main.resourcePath!+"/sound.mp3"
print(path)
let url = URL(fileURLWithPath: path)
let playerItem = AVPlayerItem(url: url)
player = AVPlayer(playerItem: playerItem)
player.play()
// i have created a btn for playing a local file, this is it's action
@IBAction func urlPressed(_ sender: Any)
let playerItem = AVPlayerItem(url: URL(string: "https://yourURL.mp3")!)
player = AVPlayer(playerItem: playerItem)
player.play()
// i have created another btn for playing a URL file, this is it's action
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
【讨论】:
我觉得不错!我为项目使用了 URL 文件(#2),并且正在播放音频。 问题是关于AVAudioPlayer
而不是AVPlayer
【参考方案2】:
我的方法
func preparePlayer()
guard let url = URL(string: "https://yourURL.mp3") else
print("Invalid URL")
return
do
let session = AVAudioSession.sharedInstance()
try session.setCategory(AVAudioSessionCategoryPlayback)
let soundData = try Data(contentsOf: url)
audioPlayer = try AVAudioPlayer(data: soundData)
audioPlayer.volume = 1
let minuteString = String(format: "%02d", (Int(audioPlayer.duration) / 60))
let secondString = String(format: "%02d", (Int(audioPlayer.duration) % 60))
print("TOTAL TIMER: \(minuteString):\(secondString)")
catch
print(error)
【讨论】:
let soundData = try Data(contentsOf: url) /// 是一行代码,经常不用,会报错,没有声音。以上是关于使用 AVAudioPlayer 在 Swift 中播放远程 mp3 文件的主要内容,如果未能解决你的问题,请参考以下文章
无法在 swift 4 中使用 avaudioplayer 播放 http 音频
如何在 Swift 3 中使用 AVAudioPlayer 播放 .ogg 音频文件?
Swift:为 AVAudioPlayer 添加PeriodicTimeObserverForInterval
在 Swift 3 中使用带有动态 URL 的 AVAudioPlayer 导致线程错误