Потоковое аудио IOS с использованием Firebase Storage - PullRequest
1 голос
/ 29 мая 2020

Успешно ли удалось сохранить аудиофайл в хранилище firebase, а затем передать тот же файл в IOS?

До сих пор я успешно записывал звук в быстром (.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 и импортировал его в var вызвал "stream" и безуспешно пытался передать его в аудиоплеер ...

Я вижу некоторую информацию о firestore, поддерживающем потоковую передачу для Andriod, но ничего не связанного с IOS.

Кто-нибудь может предложить здесь помощь? Нужно ли мне использовать другую службу для хранения URL-адресов потоковой передачи? Хотелось бы запустить мой MVP только с использованием firebase, если это возможно.

@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)
                        }
                    }


                }
         }
    }
}

}

Полный аудиоплеер для справки!

класс AudioPlayer: 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
    }
}

}

...