将实时音频输入放入字节数组并作为 XMPP 消息发送时出现 OnStreamError

Getting OnStreamError while putting live audio input to byte array and sending as XMPP message

我正在尝试从麦克风捕获实时音频并将其转换为字符串并发送到 XMPP 客户端。我的服务器是 Openfire。我的客户端可以接收文本消息,但是当我将流式字节数组转换为字符串并作为 XMPP 消息发送时,我收到 OnStreamError 错误 base {agsXMPP.Xml.Dom.Element} = {<stream:error xmlns:stream="http://etherx.jabber.org/streams"><xml-not-well-formed xmlns="urn:ietf:params:xml:ns:xmpp-streams" /></stream:error>} 我尝试发送转换后的数据(音频>>>字节[]>>>> string) 作为文本手动发送,但也不会发送。此消息还会阻止正常的文本消息传递。这是我的代码

private void SendMessage(Command cmd, Jid to)
    {
        try
        {                
            Data msgToSend = new Data();

            msgToSend.strName = xmpp.Username;   
            msgToSend.cmdCommand = cmd;        
            msgToSend.vocoder = vocoder;       

            byte[] messageB = msgToSend.ToByte();
            var str = System.Text.Encoding.Default.GetString(messageB);
            //byte[] reConverted = System.Text.Encoding.Default.GetBytes(str);
            agsXMPP.protocol.client.Message message = new agsXMPP.protocol.client.Message(new Jid(lbxContacts.SelectedItem.ToString()),
                              MessageType.chat,
                              str);

            xmpp.Send(message);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

您需要在发送字符串之前对字符串进行 XML 转义(并在接收端对其进行解码),尽管更好的方法是简单地将字节数组转换为 base64 编码并跳过完全转换为字符串。

您还可以 运行 大小限制创建过大的节。发送大块二进制数据的更好方法是使用 Bytestreams. There is also a protocol specifically for doing live audio.

您应该检查您使用的库是否支持这些协议。