【问题标题】:Swift 3 Play audio downloaded from FirebaseSwift 3 播放从 Firebase 下载的音频
【发布时间】:2017-10-09 18:24:32
【问题描述】:

我是 Swift 新手,我设法从 firebase 下载音频并将其存储在本地,但不知道如何使用 AVAudioPlayer。任何帮助,将不胜感激。这是我到目前为止得到的。

class FireBaseViewController: UIViewController {

     var audioPlayer:AVAudioPlayer = AVAudioPlayer()

    override func viewDidLoad() {
        super.viewDidLoad()


        let storageRef = FIRStorage.storage().reference()

        let files = storageRef.child("Audio/Self Commitment.m4a")

        let localURL: NSURL! = NSURL(fileURLWithPath:"/Users/wayne/Desktop/Playground/Audio/Self Commitment.m4a")

        let downloadTask = files.write(toFile: localURL as URL) { (URL, error) -> Void in
                        if (error != nil) {
                            print("Uh-oh, an error occurred!")
                        } else {
                             print("Local file URL for  is returned")
                        }
                    }

                let audioPath = localURL

        do {

            try audioPlayer = AVAudioPlayer(contentsOf:URL(fileURLWithPath: audioPath))

        }   catch {print("file is unavilable")

        }
       audioPlayer.play()

    }

    }

【问题讨论】:

    标签: ios firebase swift3 firebase-storage


    【解决方案1】:

    我遇到了同样的问题。我所做的是使用 FileManager 生成存储文件的 URL

    let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("file_name.mp3")
    

    然后你可以保存文件并像这样播放:

    storeRef.getData(maxSize: 10 * 1024 * 1024) { (data, error) in
            if let error = error {
                print(error)
            } else {
                if let d = data {
                    do {
                        try d.write(to: fileURL)
                        self.audioPlayer = try AVAudioPlayer(contentsOf: fileURL)
                        self.audioPlayer.play()
                    } catch {
                        print(error)
                    }
                }
            }
        }
    

    我已经试过了,效果很好!

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。米歇尔的回答帮助了我。尽管您可能需要缓存系统,但您不必使用 FileManager。

      https://stackoverflow.com/a/51733033/12208004

      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.prepareToPlay()
                  audioPlayer.volume = 0.7
                  audioPlayer.delegate = self
                  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)
              }
          }
      

      【讨论】:

        【解决方案3】:

        您也可以在不下载的情况下播放音频。为此,您应该:

        1) 获取下载地址

        2) 用这个 url 启动 AVPlayerItem

        3) 设置播放器并播放

        Swift 4.2

        let storage = Storage.storage()    
        let storageReference = storage.reference(forURL: storagePath)
                    storageReference.downloadURL { (hardUrl, error) in
                        if error == nil, let url = hardUrl {
                            self.playerItem = AVPlayerItem(url: url)
                            self.playerInstance = AVPlayer(playerItem: self.playerItem)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-14
          • 2017-08-02
          • 1970-01-01
          • 2019-01-15
          • 2017-03-28
          • 1970-01-01
          • 2019-04-03
          • 2018-01-01
          相关资源
          最近更新 更多