【问题标题】:Getting OnStreamError while putting live audio input to byte array and sending as XMPP message将实时音频输入放入字节数组并作为 XMPP 消息发送时出现 OnStreamError
【发布时间】:2015-06-04 11:56:22
【问题描述】:

我正在尝试从麦克风捕获实时音频并将其转换为字符串并发送到 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>} 我试图发送转换后的数据(音频>>>字节[]>>>>字符串)手动作为文本但不发送。此消息还会阻止正常的文本消息传递。这是我的代码

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

【问题讨论】:

    标签: c# xml audio xmpp openfire


    【解决方案1】:

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

    您还可能会在创建过大的节时遇到大小限制。发送大块二进制数据的更好方法是使用Bytestreams。还有一个专门用来做live audio的协议。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2022-01-06
      • 2014-09-18
      • 2021-02-28
      相关资源
      最近更新 更多