Ios 发送大尺寸图像、视频和音频时断开XMPP客户端的连接
我已经使用robbiehanson xmpp示例实现了xmpp。我可以聊天,也可以发送图像。我正在发送的图像将转换为nsdata,并进一步转换为Base64String,然后使用Ios 发送大尺寸图像、视频和音频时断开XMPP客户端的连接,ios,video,xmpp,file-transfer,xmppframework,Ios,Video,Xmpp,File Transfer,Xmppframework,我已经使用robbiehanson xmpp示例实现了xmpp。我可以聊天,也可以发送图像。我正在发送的图像将转换为nsdata,并进一步转换为Base64String,然后使用 [self.xmppStream sendElement:message] 这样,如果图像的大小很小,我可以立即发送,但如果图像的大小较大,两个xmpp用户就会断开连接,文件不会传输。同样的事情也发生在视频和音频上。虽然我可以使用 UIImageJPEGRepresentation(image,0.005); 但是如
[self.xmppStream sendElement:message]代码>
这样,如果图像的大小很小,我可以立即发送,但如果图像的大小较大,两个xmpp用户就会断开连接,文件不会传输。同样的事情也发生在视频和音频上。虽然我可以使用
UIImageJPEGRepresentation(image,0.005);
但是如何发送视频和音频的大小显然会很大。我已经阅读了关于XEP-0065和XEP-0096的文档,但无法以正确的方式实现它。请让我知道为什么用户会断开连接,为什么我无法使用base64传输繁重的文件,并共享有助于我传输视频和音频的代码
非常感谢您的帮助。虽然XMPP允许传输少量二进制数据,但建议“带外”共享大文件或视频/音频流,并使用XMPP as-您只需发送http://或rtp://链接,您好友的客户端将下载该链接,或从给定流开始播放音频/视频。您可以以任何形式发送该链接,但有一些“草稿标准”XMPP扩展,允许与现有客户端兼容:
-简单的扩展,您只需将URL附加到标准
元素李>
和-这些是“元”规范,描述客户端如何“协商”其支持的功能、选择共享数据的方式(、等)、查找打开的TCP端口或中介代理、NAT遍历等
因此,如果您只想共享文件,请通过任何现有的文件共享服务共享文件,并按照第一个XEP中所述发送URL。如果您想构建大型服务或VOIP应用程序,请使用SI或Kingle。但是没有人阻止您创建自己的XMPP扩展,这可能更容易实现。是一个定制的XMPP扩展,它不是由XMPP社区开发的,但被XSF作为实验性的接受,您也可以检查它。虽然XMPP允许传输少量二进制数据,但建议“带外”共享大文件或视频/音频流,并使用XMPP作为-您只需发送http://或rtp://链接,您好友的客户端将下载它,或从给定流开始播放音频/视频。您可以以任何形式发送该链接,但有一些“草稿标准”XMPP扩展,允许与现有客户端兼容:
-简单的扩展,您只需将URL附加到标准
元素李>
和-这些是“元”规范,描述客户端如何“协商”其支持的功能、选择共享数据的方式(、等)、查找打开的TCP端口或中介代理、NAT遍历等
因此,如果您只想共享文件,请通过任何现有的文件共享服务共享文件,并按照第一个XEP中所述发送URL。如果您想构建大型服务或VOIP应用程序,请使用SI或Kingle。但是没有人阻止您创建自己的XMPP扩展,这可能更容易实现。是一个定制的XMPP扩展,它不是由XMPP社区开发的,但被XSF接受为实验性的,您也可以检查它。即使我没有直接将图像发送到XMPP,因为它需要很多时间
在我的项目中,我的消息可以是字符串,也可以是图像,我发现只有一种方法可以发送消息,即
[xmppRoom sendMessageWithBody:@"Your msg"];
因此,对于首先发送图像,我将其转换为base64,然后将其上载到我的服务器,并从服务器获取该图像的URL。一旦我们得到这个URL,就用上面的方法传递这个URL
我面临的问题是如何将普通消息和URL(图像)分开
因此,对于发送普通文本,我直接将其发送到函数上方,但对于发送URL,我发送nsdictionary,即,我将nsdictionary转换为字符串,并将其发送到函数上方
NSDictionary *dict = @{@"type":@"image",
@"url":@"Url of your image"};
NSString *newMessage = [NSString stringWithFormat:@"%@",dict];
[appDelegate.xmppRoom sendMessageWithBody:newMessage];
用于隔离中的正常消息和图像-
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
messages *msg = [messages new];
NSDictionary *dictOfMedia = [NSPropertyListSerialization
propertyListWithData:[[[message elementForName:@"body"] stringValue] dataUsingEncoding:NSUTF8StringEncoding]
options:kNilOptions
format:NULL
error:NULL];
if ([dictOfMedia objectForKey:@"type"])
{
msg.mediaType = [dictOfMedia objectForKey:@"type"];
msg.url = [dictOfMedia objectForKey:@"url"];
}
else
{
msg.msg = [[message elementForName:@"body"] stringValue];
}
}
messages是我的模型类,您可以简单地使用nsstring进行测试
在此之后,只需使用任何开源项目下载图像或自己执行延迟加载
希望这能帮助您:)即使我没有将图像直接发送到xmpp,因为这需要很多时间
在我的项目中,我的消息可以是字符串,也可以是图像,我发现只有一种方法可以发送消息,即
[xmppRoom sendMessageWithBody:@"Your msg"];
因此,对于首先发送图像,我将其转换为base64,然后将其上载到我的服务器,并从服务器获取该图像的URL。一旦我们得到这个URL,就用上面的方法传递这个URL
我面临的问题是如何将普通消息和URL(图像)分开
因此,对于发送普通文本,我直接将其发送到函数上方,但对于发送URL,我发送nsdictionary,即,我将nsdictionary转换为字符串,并将其发送到函数上方
NSDictionary *dict = @{@"type":@"image",
@"url":@"Url of your image"};
NSString *newMessage = [NSString stringWithFormat:@"%@",dict];
[appDelegate.xmppRoom sendMessageWithBody:newMessage];
用于隔离中的正常消息和图像-
- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
messages *msg = [messages new];
NSDictionary *dictOfMedia = [NSPropertyListSerialization
propertyListWithData:[[[message elementForName:@"body"] stringValue] dataUsingEncoding:NSUTF8StringEncoding]
options:kNilOptions
format:NULL
error:NULL];
if ([dictOfMedia objectForKey:@"type"])
{
msg.mediaType = [dictOfMedia objectForKey:@"type"];
msg.url = [dictOfMedia objectForKey:@"url"];
}
else
{
msg.msg = [[message elementForName:@"body"] stringValue];
}
}
messages是我的模型类,您可以简单地使用nsstring进行测试
在此之后,只需使用任何开源项目下载图像或自己执行延迟加载
希望这能帮助您:)给我一个在xmpp中发送和接收音频和视频等文件的示例代码。尝试搜索很多东西但无法排序Hello vitalyster你能提供发送和接收文件的示例代码吗?我有太多的google,但找不到正确的东西。有没有人有发送或接收文件的示例代码?我面临503服务不可用的问题。如果您可以共享代码,那将非常有帮助。请给我一个在xmpp中发送和接收音频和视频等文件的示例代码。尝试搜索很多东西,但无法将其排序Hello vitalyster可以