【问题标题】:Audio Streaming IOS using Firebase Storage使用 Firebase 存储的音频流 IOS
【发布时间】:2020-05-28 21:53:32
【问题描述】:

有没有人成功地将音频文件存储在 Firebase 存储中,然后在 IOS 中流式传输相同的文件?

到目前为止,我已经成功地在 swift (.m4a) 中录制了音频,将文件上传到 firebase 存储,检索到如下所示的下载 url:

https://firebasestorage.googleapis.com/v0/b/ramb-ecce1.appspot.com/o/rambs%2Framb5E735EE0-E089-4B53-9B7D-DB7AD6CBF7DC?alt=media&token=52b02ee7-9f6b-474b-ab3b-92e0ca9182f3

我将该音频存储在我的 firebase 数据库中,并将其导入一个名为“stream”的 var 中,并尝试将其传递给音频播放器,但没有成功...

我看到一些关于 Firestore 支持 Andriod 流式传输的信息,但与 IOS 无关。

有人可以在这里提供一些帮助吗?我是否需要使用其他存储服务来托管流 url?如果可能的话,我希望只使用 firebase 来启动我的 MVP。

@ObservedObject var audioPlayer = AudioPlayer()

var stream = ""

var body: some View {

                VStack(alignment: .leading){

                    if audioPlayer.isPlaying == false {

                        Button(action: {
                            self.audioPlayer.startPlayback(audio: URL(string: self.stream)!)
                        }) {
                            Image(systemName: "play.circle")
                                .resizable()
                                .frame(width: 50, height: 50)
                        }
                    } else {

                        Button(action: {
                            self.audioPlayer.stopPlayback()
                        }) {
                            Image(systemName: "stop.fill")
                                .resizable()
                                .frame(width: 50, height: 50)
                        }
                    }


                }
         }
    }
}

}

完整的音频播放器供参考!

音频播放器类:NSObject、ObservableObject、AVAudioPlayerDelegate {

let objectWillChange = PassthroughSubject<AudioPlayer, Never>()

var isPlaying = false {
    didSet {
        objectWillChange.send(self)
    }
}

var audioPlayer: AVAudioPlayer!

func startPlayback (audio: URL) {

    let playbackSession = AVAudioSession.sharedInstance()

    do {
        try playbackSession.overrideOutputAudioPort(AVAudioSession.PortOverride.speaker)
    } catch {
        print("Playing over the device's speakers failed")
    }

    do {
        audioPlayer = try AVAudioPlayer(contentsOf: audio)
        audioPlayer.delegate = self
        audioPlayer.play()
        isPlaying = true
    } catch {
        print("Playback failed.")
    }
}

func stopPlayback() {
    audioPlayer.stop()
    isPlaying = false
}

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
    if flag {
        isPlaying = false
    }
}

}

【问题讨论】:

  • 我应该添加一些上下文,我以名为“stream”的变量的形式从 Firebase DB 检索下载 URL。
  • AVAudioPlayer 不适用于远程 url,您可以下载它并将其用作数据。 stackoverflow.com/a/51733033/12208004

标签: swift firebase firebase-storage audio-streaming


【解决方案1】:

你试过StreamingKit吗?

var audioPlayer: STKAudioPlayer = STKAudioPlayer()

// Use this in your method
audioPlayer.play(audioURL)

有了它,您可以将上述内容用于本地 URL 或带有令牌的 Firebase URL。

【讨论】:

  • 你也可以用它来追踪和进步。
猜你喜欢
  • 1970-01-01
  • 2016-10-18
  • 2017-05-09
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
相关资源
最近更新 更多