我正在尝试从麦克风捕获实时音频并将其转换为字符串并发送到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);
}
}
答案 0 :(得分:0)
在发送之前你需要对字符串进行XML转义(并在接收端解码),尽管更好的方法是简单地将字节数组转换为base64编码并完全跳过转换为字符串
您可能还会遇到大小限制,从而产生过大的节。发送大块二进制数据的更好方法是使用Bytestreams。还有一个专门用于执行live audio的协议。
您应该检查您使用的库是否支持这些协议。