说明:此系类的内容都是本人自己对libjingle native API代码的学习总结。其中一定包含大量不准确甚至是错误的内容。欢迎大家帮忙指出错误。
此文是个人根据webrtc项目中的libjingle部分总结出来。只代表webrtc中的libjingle部分的结构,不代表原始的libjingle项目。
1, libjing 基本结构。
下图仅描述视频部分的传输,音频部分有所不同,但是基本结构类似。图中虚线表示媒体数据流向。
VideoCapture: 视频捕捉功能抽象, 通过SignalVideoFrame信号传输捕捉的Frame数据。
MediaChannel: 媒体相关功能的抽象,接收capture/network的数据,处理后发送给其他模块。实际的处理工作需要有继承类调用其他模块实现。
TransprotChannel: 提供抽象的P2P传输功能。实现ICE协议,ICE协商后,会选择最好的方法发送。对外只暴露发送和接收的接口。
Port: 具体的传输模块。派生出各种端口类型,如UDP/Stun/TCP/Turn等。 具体的端口根据相应的协议发送数据。
Candidate: 对本端网络通信能力的一种描述。对于UDP/Stun协议,candidate仅包含IP及端口信息,对于trun,包含turn server的IP,端口,以及用户名密码等。candidate由本端代码生成。生成后通过信令发送给对端。对端会在本端所有的candidate中选择一个最好的建立与本端的连接。
BaseChannel: 管理MeidaChannel和TransportChannel并维护本端和对端的媒体描述信息(description)