Загрузка аудио сообщения занимает слишком много времени - PullRequest
0 голосов
/ 13 ноября 2018

Я использую JSQMessageViewController для пользовательского интерфейса приложения чата в реальном времени и базу данных для базы данных приложения чата.Для текстового сообщения и графического сообщения загрузка все еще считается нормальной, но когда дело доходит до звукового сообщения, это занимает очень много времени.Вот мой код для извлечения аудио сообщения:

func observeMessages() {

    let userMessagesRef = Database.database().reference().child("messages").child(Id).child(senderId).queryLimited(toLast: 50)
    userMessagesRef.observe(.childAdded, with: { (snapshot) in

        let messageId = snapshot.key
        let messagesRef = Database.database().reference().child("messages").child(messageId)

        messagesRef.observeSingleEvent(of: .value, with: { (snapshot) in

            if (dictionary["fromId"] as? String ?? "" == self.userId ? dictionary["toId"] as? String ?? "" : dictionary["fromId"] as? String ?? "") == self.contactLists.first?.id{

                let date = NSDate(timeIntervalSince1970: dictionary["timestamp"] as? Double ?? 0.0)

                let textString = dictionary["text"] as? String ?? ""
                let imgString = dictionary["imageUrl"] as? String ?? ""
                let voiceString = dictionary["voiceUrl"] as? String ?? ""

                if textString == "image"{

                    let imageView = AsyncPhotoMediaItem(withURL: URL(string: imgString)!)
                    let message = JSQMessage(senderId: dictionary["toId"] as? String ?? "", senderDisplayName: "", date: date as Date, media: imageView)
                    self.messages.append(message!)

                }else if textString == "voice"{

                    print("voice msg")
                    let url = URL(string: voiceString)
                    let data = try? Data(contentsOf: url!)
                    let voiceData = data
                    let voice1 = JSQAudioMediaItem(data: voiceData)

                    let message = JSQMessage(senderId: dictionary["toId"] as? String ?? "", senderDisplayName: "", date: date as Date, media: voice1)
                    self.messages.append(message!)

                }else{

                    print("text msg")
                    let message = JSQMessage(senderId: dictionary["toId"] as? String ?? "", senderDisplayName: "", date: date as Date, text:  dictionary["text"] as? String ?? "")
                    self.messages.append(message!)

                }

            }; DispatchQueue.main.async {

                self.collectionView?.reloadData()

            }

            self.finishReceivingMessage(animated: true)

        }, withCancel: nil)

    }, withCancel: nil)
}

Может кто-нибудь мне помочь или есть какой-то другой способ сделать это или улучшить его?Пожалуйста, помогите мне

...