将实时音频输入放入字节数组并作为 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.
您应该检查您使用的库是否支持这些协议。
我正在尝试从麦克风捕获实时音频并将其转换为字符串并发送到 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.
您应该检查您使用的库是否支持这些协议。