`

[Libjingle代码分析]对照Jingle的XMPP stanza理解Libjingle的几个关键数据结构

阅读更多

1.

SessionManager管理多个Session:

class SessionManager {
  typedef std::map<std::string, Session*> SessionMap;
  SessionMap session_map_;
}

每个Session在SessionManager里通过sid来区分:

session_map_[session->id()] = session;
 

通过SessionManager::CreateSession(content_type)创建一个Session, 每个Session对应一个content_type:

class Session {
  std::string content_type_;
}

content_type目前传入的为"urn:xmpp:jingle:apps:rtp:1", 其实就是<content>下<description>元素的"xmlns"属性值.

 

2.

一个Session管理多个Transport:

typedef std::map<std::string, TransportProxy*> TransportMap;
class Session {
  TransportMap transports_;
}

每个Transport在Session里通过content_name来区分:

transports_[content_name] = transproxy;

 

通过Session::GetOrCreateTransportProxy(content_name)来创建一个Transport. content_name就是<content>元素的name属性值, 如"audio", "video"等. 比如, 在视频聊天中:

<jingle>
  <content name="audio" creator="initiator">
  </content>
  <content name="video" creator="initiator">
  </content>
</jingle>

 

3.

一个Transport管理多个Transportchannel:

typedef std::map<std::string, TransportChannelImpl*> ChannelMap;
class Transport {
  ChannelMap channels_;
} 

每个Transportchannel通过channel_name来区分:

channels_[name] = channel;
 

通过 Transport::CreateChannel(name)创建一个Transport, channel_name没有对应的XMPP stanza, 其值有"rtp", "rtcp"等.

 

4.

一个TransportChannel(主要是P2PTransportChannel)管理多个Port:

class P2PTransportChannel {
  std::vector<Port *> ports_;
}

 

Port分为StunPort, TCPPort, UDPPort等, 与<transport>元素的xmlns属性值(如"urn:xmpp:jingle:transports:ice-udp:1")以及子元素<candidate>的protocol属性值(如"udp")有关.

 

5.

一个Port管理多个Connection:

class Port {
  typedef std::map<talk_base::SocketAddress, Connection*> AddressMap;
  AddressMap connections_;
}

 

6.

一个Connection包括一个local_candidate和一个remote_candidate:

class Connection

class Connection {
  size_t local_candidate_index_;
  Candidate remote_candidate_;
}
分享到:
评论

相关推荐

    libjingle源码(linux版本)

    **标题与描述解析** 标题"libjingle源码(linux版本)"指的是开源项目libjingle的一个特定...同时,libjingle作为一个成熟的开源项目,其代码质量高、设计清晰,对于提升编程技能和理解现代网络通信技术有着极大的帮助。

    libjingle源码(含GIPS LITE)

    libjingle源码(含GIPS LITE),方便大家编译上传

    libjingle连接openfire

    首先,libjingle的核心是基于XMPP(可扩展消息处理即时通讯协议),这是一个开放标准,被广泛用于即时通讯应用。libjingle支持多种传输协议,包括ICE(Interactive Connectivity Establishment)、STUN(Session ...

    libjingle文档和0.4.0版本源码

    其次,**源码索引** 是对libjingle项目源代码结构的梳理,通常包括以下几个部分: 1. **目录结构**:列出源代码的组织方式,包括各个子模块的作用,如音视频处理、网络通信和信令协议等。 2. **关键文件**:突出...

    libjingle-0.6.2.

    组件包包括了Jingle和Jingle-Audio的google实现的源代码,它们是XMPP标准的推荐扩展,目前试验版可用。 我们发布此代码是为了让消费者们在实时通讯工具的选择和操作性更多些。Google的源码发布基于Berkeley协议,也...

    Libjingle 通过vs2005编译

    组件包包括了Jingle和Jingle-Audio的google实现的源代码,它们是XMPP标准的推荐扩展,目前试验版可用。 我们发布此代码是为了让消费者们在实时通讯工具的选择和操作性更多些。Google的源码发布基于Berkeley协议,也...

    libjingle0.6.14编译好的.lib

    **标题与描述解析** 标题"libjingle0.6.14编译好的....综上所述,libjingle0.6.14编译好的.lib文件是一个集成了P2P通信、XMPP协议支持、安全的实时数据传输以及XML解析能力的库,适用于开发需要实时音视频通信的应用。

    VS2010编译libjingle0.6.2步骤

    知识点解释:在 vs2010 命令行中设置 scons_dir 环境变量是一个关键步骤,它将影响 libjingle 库的编译结果。 10. 编译 libjingle 库:在 vs2010 命令行中运行 hammer 命令,以编译 libjingle 库。 知识点解释:...

    libjingle-0.5.1.zip

    8. **libjingle-0.5.1**:这个版本的libjingle包含了0.5.1版的源代码、库文件和其他资源,可能包括头文件、编译脚本、示例代码等,供开发者在构建自己的WebRTC应用时使用。 总的来说,“libjingle-0.5.1.zip”对于...

    libjingle的封装库

    5. **安全通信**:为了保证通信的安全性,libjingle支持SRTP(Secure Real-time Transport Protocol)和DTLS(Datagram Transport Layer Security)等安全协议,用于加密音视频数据,防止窃听和篡改。 "libjingle...

    带GIPS的libjingle source

    标题 "带GIPS的libjingle source" 指的是一个包含GIPS(Global IP Sound)技术的libjingle源代码库。libjingle是Google开发的一个开源项目,主要用于实现跨平台的实时通信(RTC)功能,特别是网络音视频通话。GIPS是...

    基于海思芯片(ARM平台)的libjingle静态库(交叉编译).rar

    Libjingle是一个方便实现P2P传输的开源库,由google公司开发,并与2005年12月15日发布第一个版本,可以粗略的看成是Jingle协议的C++实现库(peakflys注:只是和Jingle协议非常相似,并不完全兼容,区别以后介绍),...

    libjingle0.6.14

    描述中的"libjingle0.6.14 版本,p2p学习"暗示了这个压缩包可能是为了学习libjingle库的P2P功能而准备的资源,可能包含了源代码、文档、示例或者其他有助于理解P2P通信机制的材料。 **libjingle库详解** libjingle...

    libjingle vs2010 编译通过

    libjingle使用了Google的协议缓冲区(Protocol Buffers,简称protobuf),这是一种数据序列化协议,用于结构化数据的编码和解码。因此,你也需要编译和链接protobuf库。此外,它还依赖于其它组件,如OpenSSL用于加密...

    libjingle_peerconnection

    《深入理解libjingle_peerconnection:WebRTC的核心组件》 libjingle_peerconnection是Google开源项目WebRTC(Web Real-Time Communication)中的关键组件,它在实时通信领域扮演着至关重要的角色。WebRTC是一种...

    libjingle学习笔记

    libjingle中的重要概念 关于libjingle你应当理解下面的重要概念: Signals Threads and Messages Naming Conventions SSL Support Connections Transports, Channels, and Connections Candidates Data ...

    android webrtc libjingle_peerconnection

    Android WebRTC是一个强大的开源项目,它实现了WebRTC(Web Real-Time Communication)标准,允许在浏览器和其他应用程序之间进行实时通信,包括视频通话、音频聊天和数据共享。libjingle_peerconnection是Android ...

    【自整理】源于谷歌的libjingle的API (libjingle Reference).xlsx

    源:https://developers.google.com/talk/libjingle/reference/ 语言:English 源于谷歌的libjingle的API。 个人整理成表格,方便开发时查找。 希望能帮助相关开发者。

    MyJingle_添加文字聊天

    工程基于vs2008,代码基于德国人的MyJingle-src-0.2.0,myjingle是对libjingle的实现,基于XMPP协议。可以进行点对点的语音聊天以及文字聊天。可以用gtalk的账号,也可以自己用openfire作为服务器配置账号。

    vs2015编译通过的带gips及所有必须资源的libjingle工程

    libjingle支持多种协议,如Jingle、XMPP和ICE,用于建立和管理P2P连接。它提供了底层网络传输、信令处理和媒体交换等功能,使得开发者可以快速构建出复杂的音视频通信应用,而无需从零开始编写底层网络代码。 GIPS...

Global site tag (gtag.js) - Google Analytics