没有合适的资源?快使用搜索试试~ 我知道了~
首页RTSP Live555开源框架源码阅读笔记
RTSP Live555开源框架源码阅读笔记
需积分: 25 184 浏览量
更新于2023-05-27
评论
收藏 669KB DOCX 举报
上一篇文章简要介绍了怎样以共享库的方式交叉编译Live555,今天再来介绍live源代码框架。 先对live555有一个宏观的认识,为今后的实战打个基础。 liveMedia项目的源代码包含四个主要的库,各种測试代码以及IVE555 Media Server。四个主要的库各自是UsageEnvironment&TaskScheduler;,groupsock,liveMedia,BasicUsageEnvironment。 这几个类都是整个系统的基础功能类,这些都是抽象类,在应用程序中基于这些类实现自己的子类。
资源详情
资源评论
资源推荐

参考:乌合之众、牛缟、
任务相关类
Timeval、DelayInterval、_EventTime
事件调度类
HandlerDescriptor、HandlerSet、HandlerIterator
节点包含变量:
int socketNum;//套接字
int conditionSet;//对应的操作
TaskScheduler::BackgroundHandlerProc* handlerProc;//函数指针
void* clientData;//数据
HandlerDescriptor* fNextHandler;
HandlerDescriptor* fPrevHandler;
HandlerSet:
HandlerDescriptor fHandlers;//头结点
DelayQueueEntry、DelayQueue
节点包含变量:
DelayInterval fDeltaTimeRemaining;//代表时间间隔
intptr_t fToken;//节点标识
static intptr_t tokenCounter;//计数
DelayQueueEntry* fNext;
DelayQueueEntry* fPrev;
DelayQueue:
_EventTime fLastSyncTime;//同步时间
这个链表的设计和前面不一样。其内部只有一个 EventTime fLastSyncTime 最后同步时
间的数据成员。并不包含一个链表的头结点。但是其本身是 DelayQueueEntry 的派生类,
所以其本身就是一个链表头结点。第一个结点不是头结点
AlarmHandler: AlarmHandler 继 承 自 DelayQueueEntry 其 是 用 来 作 为
DelayQueued 的节点
TaskFunc* fProc;//函数指针
void* fClientData;//数据
scheduleDelayedTask();调度延时任务
createEventTrigger();触发事件
setBackgroundHandling();处理程序

抽象基类 TaskScheduler 派生出 BasicTaskScheduler0, BasicTaskScheduler0 再
派生出 BasicTaskScheduler。
TaskScheduler 主要是一些接口的定义。
BasicTaskScheduler0 主要实现了触发事件的管理。触发事件其主要有三个要素, 分别
是触发调用函数, 数据参数, 和等待触发掩码。
其中触发调用函数地址保存在函数指针数组中(触发函数类型是: void TaskFunc(void*
clientData)),数据参数保存在数据参数指针
数组里(void*),等待触发掩码是用于控制其在 doEventLoop 调用的 SingleStep 中是否
被触发的标识。
BasicTaskScheduler 是任务调度器的最终成果。它包含了上述两者,并加入了延时队列
DelayQueue 和处理程序链表 HandlerSe
t 成员。在 SingleStep 中使用了 select 非阻塞 I/O 模型来进行处理 fHandlerSet 链表
中的处理程序对象。 fHandlerSet 中的链表
节 点 成 员 是 HandlerDescriptor 对 象 类 型 , 其 有 四 个 重 要 的 成
员(socketNum/conditionSet/handlerProc/clientData), 在前
面介绍过,这里再提一下。 socketNum 用来标识节点,在这里应当会赋予一个网络
socket 套接口给它; handlerProc 是调用的函数的地
址 , 其 类 型 是 TaskScheduler::BackgroundHandlerProc* , 而
BackgroundHandlerProc 的类型是 void BackgroundHandler
Proc(void* clientData, int mask), 所以其是一个类成员函数指针类型 。 clientData
和 conditionSet 都是其参数, 其中 con
ditionSet 是用于 socketNum 的读、 写、 异常操作的的掩码
BasicTaskScheduler
触发事件、非阻塞 socket、触发延时队列
int fMaxNumSockets; //最大的 socket 数,select 调用时提高效率
fd_set fReadSet;//监控读集合
fd_set fWriteSet; //监控写集合
fd_set fExceptionSet; //监控异常集合

哈希表相关类
TableEntry 节点
TableEntry* fNext;//指针
char const* key;//关键字
void* value;//值
BasicHashTable
TableEntry** fBuckets; // 二级指针
TableEntry* fStaticBuckets[SMALL_HASH_TABLE_SIZE];// 指针数组,每个指针指
向一个桶
unsigned fNumBuckets, fNumEntries, fRebuildSize, fDownShift, fMask;//产生索
引
int fKeyType;//键类型
int const STRING_HASH_KEYS = 0; //字符串型 key
int const ONE_WORD_HASH_KEYS = 1; //这个直接当作 char*变量, 实质是作为整
数在用
哈希表
剩余12页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0