在发送大尺寸图像,视频和音频时断开XMPP客户端

Rav*_*eja 0 video xmpp file-transfer ios xmppframework

我使用robbiehanson xmpp示例实现了xmpp.我能聊天,也能发送图像.我发送的图像转换为nsdata并进一步转换为Base64String,然后发送字符串

[self.xmppStream sendElement:message];

这样,如果图像的大小很小,我能够立即发送,但如果图像的大小更大,则两个xmpp用户断开连接并且文件不会被传输.视频和音频也是如此.虽然我能够使用压缩图像

UIImageJPEGRepresentation(image,0.005);
Run Code Online (Sandbox Code Playgroud)

但是如何发送视频和音频的大小显然会很大.我已阅读XEP - 0065和XEP - 0096上的文档,但无法以正确的方式实现它.请让我知道为什么用户断开连接,为什么我无法使用base64传输繁重的文件,也分享了有助于我传输视频和音频的代码.

真的很感谢你的帮助.

vit*_*ter 5

虽然XMPP允许传输少量二进制数据,但建议"带外"共享大型文件或视频/音频流并使用XMPP作为信令协议 - 您应该只发送http://或rtp:// link,并且您的伙伴的客户端将下载它,或开始播放来自给定流的音频/视频.您可以以任何形式发送该链接,但是有一些"草案标准"XMPP扩展,它们允许与现有客户端兼容:

  1. XEP-0066:带外数据 - 简单的扩展,您只需将URL附加到标准<message />元素.
  2. XEP-0095:流启动XEP-0166:静乐 -这些都是"元" -specifications,描述如何客户端"谈判"他们所支持的功能,选择共享数据的喜欢(哪条路IBB,OOB,字节流,叮当RTP,等),找到打开的TCP端口或中介代理,NAT遍历等.

因此,如果您只想共享文件 - 通过任何现有的文件共享服务共享它,并按照第一个XEP中的描述发送URL.如果您想构建大型服务或VOIP应用程序 - 请使用SI或Jingle.但没有人阻止您创建自己的XMPP扩展,这可能更容易实现.是一个自定义的XMPP扩展,它不是由XMPP社区开发的,但是被XSF接受为实验性的,你也可以检查它.