我已经使用 robbiehanson xmpp 示例实现了 xmpp。我可以聊天,也可以发送图片。我发送的图像被转换为 nsdata 并进一步转换为 Base64String,然后用
发送字符串[self.xmppStream sendElement:message];
这样,如果图像尺寸较小,我可以立即发送,但如果图像尺寸较大,两个 xmpp 用户将断开连接并且文件不会传输。视频和音频也会发生同样的事情。虽然我可以使用
压缩图像UIImageJPEGRepresentation(image,0.005);
但是视频和音频怎么传,尺寸明显就大了。我已阅读有关 XEP - 0065 和 XEP - 0096 的文档,但无法以正确的方式实现它。请告诉我为什么用户会断开连接,为什么我无法使用 base64 传输大文件,并分享可以帮助我传输视频和音频的代码。
非常感谢您的帮助。
最佳答案
虽然 XMPP 允许传输少量二进制数据,但建议“带外”共享大文件或视频/音频流,并使用 XMPP 作为 signaling protocol - 您只需发送 http://或 rtp://链接,您好友的客户端就会下载它,或开始播放给定流中的音频/视频。您可以以任何形式发送该链接,但有一些“标准草案”XMPP 扩展,允许与现有客户端兼容:
- > XEP-0066: Out Of Band Data - 简单的扩展,您只需将 URL 附加到标准
<message />
元素。 - > XEP-0095: Stream Initiation和 XEP-0166: Jingle - 这些是“元”规范,描述客户如何“协商”他们支持的功能,选择他们喜欢的数据共享方式(ibb,oob,bytestreams,jingle rtp,等等),发现打开 TCP 端口或中介代理、NAT 穿越等。
因此,如果您只想共享文件 - 通过任何现有的文件共享服务共享它并发送 URL,如第一个 XEP 中所述。如果您想构建大型服务或 VOIP 应用程序 - 使用 SI 或 Jingle。但是没有人会阻止您创建自己的 XMPP 扩展,这可能更易于实现。 Here是一个自定义的 XMPP 扩展,它不是由 XMPP 社区开发的,但被 XSF 接受为实验性的,你也可以检查它。
关于ios - 发送大尺寸图像、视频和音频时 XMPP 客户端断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22803896/