Bry*_*han 10 avaudioplayer ios firebase swift firebase-storage
我正在制作一个聊天室应用程序,到目前为止它能够发送消息、图像和视频。
\n我使用非常相似的方法来发送视频并且它有效,但在发送音频时它不起作用。
\n音频文件和音频网址已成功上传到 Firebase,但是当我尝试播放音频时,它显示此错误:操作无法\xe2\x80\x99t 完成。(操作系统状态错误 2003334207。)。
\n该项目变得非常庞大,而且我使用 AVAudio 的经验很少,所以如果你们以前遇到过类似的问题,请教我如何解决它。谢谢!!!
\n这是设置audioRecorder的代码,我在这里获取url并将其传递给其他函数以将音频文件放入Firebase存储中。
\nfunc startRecording() {\n let settings = [\n AVFormatIDKey: Int(kAudioFormatMPEG4AAC),\n AVSampleRateKey: 12000,\n AVNumberOfChannelsKey: 1,\n AVEncoderAudioQualityKey: AVAudioQuality.low.rawValue\n ]\n \n do {\n let audioFileUrl = getAudiFileURL()\n audioRecorder = try AVAudioRecorder(url: audioFileUrl, settings: settings)\n audioRecorder.delegate = self\n audioRecorder.record()\n blackView.isHidden = false\n } catch {\n finishRecording(success: false)\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n这是我尝试将音频文件上传到 Firebase 存储的地方,它确实打印出了正确的 downloadURL。(URL 指向文件在 iOS 设备中的位置。)
\nfunc handleAudioSendWith(url: String) {\n guard let fileUrl = URL(string: url) else {\n return\n }\n let fileName = NSUUID().uuidString + ".m4a"\n \n FIRStorage.storage().reference().child("message_voice").child(fileName).putFile(fileUrl, metadata: nil) { (metadata, error) in\n if error != nil {\n print(error ?? "error")\n }\n \n if let downloadUrl = metadata?.downloadURL()?.absoluteString {\n print(downloadUrl)\n let values: [String : Any] = ["audioUrl": downloadUrl]\n self.sendMessageWith(properties: values)\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n以下是我为上面的 audioRecorder 设置 url 的方法。
\nfunc getDocumentsDirectory() -> URL {\n let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)\n let documentsDirectory = paths[0]\n return documentsDirectory\n}\n\nfunc getAudiFileURL() -> URL {\n return getDocumentsDirectory().appendingPathComponent(".m4a")\n}\nRun Code Online (Sandbox Code Playgroud)\n这就是我播放音频的地方:
\nfunc handleAudioPLay() {\n if let audioUrl = message?.audioUrl, let url = URL(string: audioUrl) {\n do {\n try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord)\n audioPlayer = try AVAudioPlayer(contentsOf: url)\n audioPlayer?.delegate = self\n audioPlayer?.prepareToPlay()\n audioPlayer?.play()\n print("Audio ready to play")\n } catch let error {\n print(error.localizedDescription)\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n我实际上可以使用该 url 从 Firebase 下载声音文件并在我的计算机上播放,这意味着该 url 没问题。
\n| 归档时间: |
|
| 查看次数: |
5265 次 |
| 最近记录: |