获取OnStreamError,同时将实时音频输入放入字节数组并作为XMPP消息发送

时间:2015-03-31 08:07:26

标签: c# xml audio xmpp openfire

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

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

1 个答案:

答案 0 :(得分:0)

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

您可能还会遇到大小限制,从而产生过大的节。发送大块二进制数据的更好方法是使用Bytestreams。还有一个专门用于执行live audio的协议。

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