这是一个网友问我的问题,当时我的回答是:大概 Jabber 协议不支持吧,这个问题你应该去问 Google。但是当我搜索了一下 Gtalk 的帮助和网络上的内容后,居然没有发现这个问题的解答(可能是我搜索技术不到家),这就变成了一个有趣的问题。
为什么 Gtalk 不支持视频聊天?在咨询了 Wikipedia 之后,我发现我的回答基本是对的,因为 Gtalk 使用的聊天协议不支持。
Gtalk 使用的通信协议叫做 Jabber,因特网工程工作小组(IETF)已经将 Jabber 的核心 XML 串流协定以 XMPP(Extensible Messaging and Presence Protocol) 之名,正式列为认可的即时通讯及 Presence 技术。而 XMPP 的技术规格已被出版为 RFC 3920 及 RFC 3921。所以在一般的讨论中,我们不区分 Jabber 和 XMPP。
从上面的介绍中我们也可以看出,XMPP 的技术是基于可扩展标记语言(XML)的,所以呢它有它的很多优点,比如:分布式(想像一下用电子邮件聊天),可扩展(XML命名空间的特性),弹性佳(可用在不同领域,比如网络监控,游戏),多样性(Jabber协议的公开性使你不必被一款聊天软件绑架),安全(利用已有的SASL及TLS技术)。
但是也正因为 XML,XMPP 协议有一些缺点,正是这些缺点给 Gtalk 带来了限制。
缺点一:Scalability(规模可伸缩度?)--> Gtalk 不支持群组聊天(Group Chat)。
XMPP 的可伸缩度不好,当进行多用户聊天或者提供发布/订阅服务时,XMPP 会带来很多 overhead(网络开销),这样会大大降低整个系统的通信效率。一些组织正在通过添加协议扩展来解决这个问题,就比如 2007 年 6 月 Google 在 Gtalk Gadget(像我们通常在Gmail窗口中看到那个)中加入了 Group Chat 功能,但是直到现在桌面版 Gtalk 仍然不支持 Group Chat。
缺点二:No binary data(无法传输二进制数据)--> Gtalk 不支持视频聊天。
XMPP 协议的数据包通常是被编码成一个长 XML 文档,限制了它直接传输原始二进制数据流的能力,所以使用 XMMP 协议的聊天工具的文件传输一般使用其它协议,比如 HTTP 来实现,如果实在无法避免用 XMMP 协议传输文件等,它一般使用 Email 中常用的 base64编码。
但既然这样,为什么 Gtalk 支持语音聊天呢?这就要说到另一个协议,XMMP 的扩展协议 Jingle,这是一个还没有被 XMPP标准正式采纳的扩展,而 Gtalk 采用的 Jingle 协议和已提交的草案也有所不同。Jingle 协议使得 Gtalk 支持 p2p 的多媒体互动,比如语音聊天功能。
那既然有多媒体功能扩展,为什么 Gtalk 现在不支持视频聊天呢?我不相信 Google 的工程师没有尝试添加视频聊天功能,可能的原因我猜想是视频聊天的性能达不到。猜想的依据是什么呢?Gtalk API 文档,Google 说:In the future, we plan to support SIP signaling as well. 如果 Jingle 能完美支持视频聊天,大概没有需要去支持另外一个类似的多媒体协议吧。
所以呢,我们可以看到虽然 Gtalk 的当前版本有内存泄露 BUG,而一年多来(2007年1月5日发布Gtalk 1.0.0.104) Google 仍然没有发布新版本,这说明 Gtalk 项目组的精力被其它更重要的东西占用了,这个东西会不会是对 Gtalk 视频和群组聊天的支持呢?我们拭目以待。
喜欢玩新软件的朋友可以尝试一下这个:Google Talk Labs Edition,里面有一些好玩的新功能!
重要评论:作者可能对xmpp还不是很了解,文章有很多的臆想,有些不太对。xmpp协议是个总称,它包括核心协议,扩展协议等(xep)等,事实上核心协议只规定了很小很基本的一些功能,大量的功能都是在xep中规定的。而xep在逐步完善中,其中的很多功能处于实验阶段,google可能是嫌麻烦,每一次协议更新都要修改软件,索性等协议功能稳定了再去实现。xmpp协议里面是有群组聊天的,叫muc,但google只实现了它的一个子集,叫 groupchat,而没有完整实现muc。视频聊天和音频聊天本质上是一样的。google可能就是再等xep中关于jingle部分协议的稳定以后再实现。而你看到的这句话:“In the future, we plan to support SIP signaling as well.”在google talk刚推出的时候就已有了。而且那个时候它还说会推出各个操作系统平台的版本。而如今呢?所以事情的发展是会变化的。还有google那时候说要支持 sip,并不是xmpp功能有什么问题,而是想使im用户能够统一起来,互联互通。因为sip和xmpp都是被ietf接受的标准协议。
一直想安装Ubuntu.下次我安装时候请你做技术指导:)
你GTALK上的那个网友:Trensent
@Trensent:
最好的方法是让 Google 做你的技术指导,因为至少他 fulltime 都在 :)
偶觉得将来还是SIP的天下
不需要单独再使用Jabber
但是现在似乎Jabber还是统一各种IM的手段之一
当然Tencent除外
PS:偶也是KY的 第一看你的博 很不错
作者可能对xmpp还不是很了解,文章有很多的臆想,有些不太对。xmpp协议是个总称,它包括核心协议,扩展协议等(xep)等,事实上核心协议只规定了很小很基本的一些功能,大量的功能都是在xep中规定的。而xep在逐步完善中,其中的很多功能处于实验阶段,google可能是嫌麻烦,每一次协议更新都要修改软件,索性等协议功能稳定了再去实现。xmpp协议里面是有群组聊天的,叫muc,但google只实现了它的一个子集,叫groupchat,而没有完整实现muc。视频聊天和音频聊天本质上是一样的。google可能就是再等xep中关于jingle部分协议的稳定以后再实现。而你看到的这句话:“In the future, we plan to support SIP signaling as well.”在google talk刚推出的时候就已有了。而且那个时候它还说会推出各个操作系统平台的版本。而如今呢?所以事情的发展是会变化的。还有google那时候说要支持sip,并不是xmpp功能有什么问题,而是想使im用户能够统一起来,互联互通。因为sip和xmpp都是被ietf接受的标准协议。
多谢指教!
google对xmpp协议跟得不紧。而在linux平台下,有一个即时通信框架叫telepathy,它对xmpp协议跟得较紧,在telepathy内已实现现了音频、视频和群组聊天muc。未来telepathy将会成为linux下通用的即时通信框架。
这位高手说的非常对.