一个典型的Jingle XMPP stanza:
<iq from='romeo@montague.lit/orchard'
id='xs51r0k4'
to='juliet@capulet.lit/balcony'
type='set'>
<jingle xmlns='urn:xmpp:jingle:1'
action='session-initiate'
initiator='romeo@montague.lit/orchard'
sid='a73sjjvkla37jfea'>
<content creator='initiator' name='voice'>
<description xmlns='urn:xmpp:jingle:apps:rtp:1' media='audio'>
<payload-type id='96' name='speex' clockrate='16000'/>
<payload-type id='97' name='speex' clockrate='8000'/>
<payload-type id='18' name='G729'/>
<payload-type id='0' name='PCMU' />
<payload-type id='103' name='L16' clockrate='16000' channels='2'/>
<payload-type id='98' name='x-ISAC' clockrate='8000'/>
</description>
<transport xmlns='urn:xmpp:jingle:transports:ice-udp:1'
pwd='asd88fgpdd777uzjYhagZg'
ufrag='8hhy'>
<candidate component='1'
foundation='1'
generation='0'
id='el0747fg11'
ip='10.0.1.1'
network='1'
port='8998'
priority='2130706431'
protocol='udp'
type='host'/>
<candidate component='1'
foundation='2'
generation='0'
id='y3s2b30v3r'
ip='192.0.2.3'
network='1'
port='45664'
priority='1694498815'
protocol='udp'
rel-addr='10.0.1.1'
rel-port='8998'
type='srflx'/>
</transport>
</content>
</jingle>
</iq>
从XEP-0166的XML Schema可以看出, <jingle>元素下的<content>元素minOccurs为0, maxOccurs为无限. 而<content>元素下的子元素未定义, 需要到别的XEP去看, minOccurs为0, maxOccurs为无限.
从XEP-0167的XML Schema可以看出, <description>元素下的<payload-type>元素minOccurs为0, maxOccurs为无限.
从XEP-0176的XML Schema可以看出, <transport>元素下的<candidate>元素minOccurs为1, maxOccurs为无限.
结合起来, 意味着<jingle>元素作为<iq>元素的子元素, 其下面可以包含任意多个<content>子元素, 而<content>子元素下面可以包含任意的<description>元素和<transport>元素.
所以, Libjingle在实现Jingle协议的时候, 设计了对应的数据结构来实现各种可能的情况, 导致代码看起来很晦涩, 其实对照Jingle的XML Schema来看, 就很容易理解了.
分享到:
相关推荐
XMPP JINGLE Jar包 可以实现语音聊天功能
源代码中会包含对应的XML解析和生成,以及事件驱动的编程模型。 2. **TCP连接与心跳机制**:XMPP基于TCP/IP进行通信,客户端需要建立并维护与服务器的持久连接。源码中会涉及TCP套接字编程,包括连接建立、心跳包...
XMPP是一种基于XML的实时通信协议,最初由 Jabber 开发团队设计,现已成为互联网工程任务组(IETF)的标准。它主要用于即时消息传递和在线状态感知,具有高度可扩展性,支持多种应用,如聊天、文件传输、视频会议等...
XMPP是一种基于XML的开放标准协议,用于实现即时消息(IM)、在线状态通知(如可用性或“在线”状态)以及更广泛范围内的实时通信服务。 本书由三位作者共同编写完成:Peter Saint-Andre、Kevin Smith 和 Remko Tronç...
XMPP是一种基于XML的实时通信协议,广泛用于即时通讯、在线状态管理和多方通信。AgsXMPP库的核心目标是简化开发者在.NET环境中构建XMPP应用程序的过程。 Jingle是XMPP协议的一个重要扩展,它为XMPP网络提供了音视频...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放标准通信协议,主要用于即时通讯(IM)和在线状态管理。在.NET框架下,开发者可以利用C#语言来实现XMPP协议,以创建实时、双向的通信应用。...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,广泛应用于即时消息、在线状态管理和多人聊天等场景。XEP(XMPP Extension Protocols)是XMPP的扩展协议,用来增加XMPP的基本功能...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,主要用于即时消息和在线状态的传输。这个协议的设计灵感来源于早期的Jabber协议,由Jabber开源社区发展而来,并在2003年被IETF...
XMPP是一种基于XML的开放标准,最初设计用于即时通讯,但后来扩展到更广泛的领域,如物联网和企业级通信。它的主要特点是分层架构和灵活性,允许开发者根据需求定制扩展。XMPP协议的核心组件包括客户端、服务器和...
XEP-Jingle协议由一系列XML元素组成,这些元素通过XMPP信令通道进行交换,用于协商会话的各个参数,包括媒体类型(音频、视频等)、编码格式、传输地址和端口等。这些元素的交互构成了会话的完整生命周期,从发起...
Jingle定义了一套用于媒体会话建立和管理的XML信令协议,它允许XMPP客户端通过NAT进行P2P通信。 综上所述,"XMPP协议及NAT穿透介绍文档"可能是阐述如何在XMPP系统中实现NAT穿透,以便用户在不同网络环境下顺畅地...
首先,XMPP的基础知识涵盖其地址结构、XML流和通讯原语。XMPP地址由域、用户、资源组成,支持国际化和统一资源标识(URI)。XMPP通过定义XML流,实现消息、出席、信息/查询等通讯原语的传输。 XMPP架构具备高度的...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML(可扩展标记语言)的开放标准网络通信协议。XMPP最初被设计用于即时消息(Instant Messaging)和在线状态呈现(Presence Information)应用,但...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,广泛应用于即时通讯、VoIP、协作软件等场景。本资源包含了一个名为"smack"的库的源代码,该库是实现XMPP客户端协议的一个流行选择...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,主要用于构建即时消息(IM)和在线状态服务。在iOS平台上实现聊天功能,尤其是群聊和语音通话,XMPP是一个常用的选择,因为它提供...
Jingle,另一方面,是基于XMPP(Extensible Messaging and Presence Protocol)的协议,用于在客户端之间建立和管理实时媒体会话。它定义了一套XML格式的信令消息,用于会话的邀请、协商、修改和终止。Jingle可以...
9. **API和库**:许多编程语言都有对应的XMPP库,如Python的 SleekXMPP,Java的Smack,JavaScript的Strophe.js等,便于开发者集成XMPP功能。 10. **应用领域**:XMPP不仅应用于即时通讯,还广泛应用于物联网、智能...
XMPP利用XML流进行通信,这种设计允许它非常容易地进行扩展。XMPP的核心通讯原语包括消息(message)、出席(presence)和信息/查询(info/query)。出席机制在XMPP中非常关键,它允许实体相互之间发布和订阅出席...
XMPP(可扩展消息和出席协议)是一种基于XML的开放标准通信协议,主要用于即时消息(IM)和在线存在信息的实时交换。XMPP最初由Jabber社区开发,后来成为了互联网工程任务组(IETF)标准化的开放即时通信协议。它被...
5. **可扩展性**:XMPP标准定义了基础框架,并允许通过扩展机制添加新功能,如Jingle用于音视频通话,OpenID进行身份验证,以及OMEMO实现端到端加密等。 在iOS平台上,使用XMPP进行即时通讯的开发通常涉及以下步骤...