【Live555】live555源码详解(三):Groupsock

类继承关系图

在这里插入图片描述

Groupsock协作图【Live555】live555源码详解(三):Groupsock_第1张图片

6、Groupsock 组播

6.1 NetInterface

NetInterface 网络接口基类,只有一个静态 public 变量

static UsageEnvironment* DefaultUsageEnvironment;	// 如果非空,将用这个环境变量创建socket
6.2 Socket

Socket 继承自 NetInterface,主要功能:创建、配置socket
主要接口:

reset	:关闭socket,并将描述符 fSocketNum 设置为 -1
socketNum	:返回描述符
port		:返回端口号
env			:返回所在环境 UsageEnvironment
构造函数	:默认创建UDP(Datagram Socket)连接 

纯虚函数

handleRead	:处理读取(收到)的数据
6.3 OutputSocket

OutputSocket 继承自 Socket ,(默认情况下)仅用于发送数据包,类内部只实现了 write 函数
虚函数:

write :向socket写,内部调用 GroupsockHelper::writeSocket,使用sendto向socket发送数据
6.4 Groupsock

Groupsock 继承自 OutputSocket,它最初设计用于发送/接收组播,但它也可以发送/接收单播。
主要接口:
// GroupEId(Group Endpoint Id)相关接口

groupAddress		:返回 fIncomingGroupEid 的组播地址
sourceFilterAddress	:返回 fIncomingGroupEid 的过滤源地址(ssm:源指定多播)
isSSM				:判断 fIncomingGroupEid 是否为SSM,即判断 souceFilterAddress 是否有效。

// destRecord 相关接口
// destRecord* fDests记录多播目的地的一个链表,这个链表里面存放的都是组播地址,以及组播端口。

createNewDestRecord	:创建节点
addDestination		:添加节点到 fDests 中
removeDestination	:删除 fDests 链表的指定节点
removeAllDestinations		:删除 fDests 链表的所有节点
changeDestinationParameters	:修改 fDests 参数
hasMultipleDestinations		:判断是否是多播
lookupSessionIdFromDestination	:从destRecord中返回fSessionId(会话ID)

// 发送、接受

OutputSocket::write :继承自OutputSocket的 write 函数
output				:通过循环调用write把给定消息依次发送到fDests指向的链表的各个组播地址,并记录状态(通过statsIncoming和statsGroupIncoming)
handleRead			:读操作

// 其它接口

ttl :得到fTTL的值,
	Time To Live (TTL) 域的信息很有趣。每一个被发送出的IP信息包都有一个TTL域,该域被设置为一个较高的数值。
	当信息包在网络中被传输时,TTL的域值通过一个路由器时递减1;当TTL 递减到0时,信息包被路由器抛弃。
members	:返回fMembers,这个成员变量是 DirectedNetInterfaceSet 类型,这是一个容器,里面有一个 hashtable 结构。
wasLoopedBackFromUs	:判断我们接受到的消息是否是 从本机而且是同一个端口发出的,防止自循环
multicastSendOnly	:只发送,不接受组播包,注意:这个函数有问题,官方(使用#if 0)将函数内容屏蔽掉了,

你可能感兴趣的:(视频,live555)