live555源码初步解析(一)

转载 2011年01月19日 14:46:00

最近因项目需要,要学习live555这个开源平台。live555是用c++实现的,对于该平台的介绍网上有很多文章,以下是个人在读它源码时的记录,也是一个初步的理解,和大家一起分享一下。有错误,或者不足之处请大家指出。

 


 BasicUsageEnvironment

a)      BasicHashTable.cpp

1.      BasicHashTable

功能: 一个简单的hash表的实现

SMALL_HASH_TABLE_SIZE=4

构造函数BasicHashTable(int keyType),传入参数键的类型

Add(char const* key, void* value增加一对键值 注:void* 指针,它可以保存任何类型对象的地址

Remove(char const* key) 根据键删除一个键值对

Lookup(char const* key) 根据键查询键值

NumEntries() 返回实体数目

HashTable* create(int keyType) hash表的创建

Iterator* create(HashTable& hashTable) 返回hash表的迭代器

b)      HandlerSet.hh (handlerSet 的定义)

1.      HandlerDescriptor类,句柄描述符

int socketNum  //socket数量

BackgroundHandlerProc* handlerProc  //句柄后台处理的进程指针

void* clientData  //客户端数据指针

2.      HandlerSet类,句柄的集合

assignHandler(int socketNum,TaskScheduler::BackgroundHandlerProc* handlerProc, void* clientData); //分配句柄

removeHandler(int socketNum);  //根据socket号删除句柄

3.      HandlerIterator类,句柄迭代器

HandlerDescriptor* next();  //下一个句柄,没有则返回NULL

reset();

 

c)      DelayQueue.hh

1.      DelayQueueEntry类,延迟队列实体

long token();  //????

2.      DelyQueue类,延迟队列

addEntry(DelayQueueEntry* newEntry); //return a token for the entry

updateEntry(DelayQueueEntry* entry, DelayInterval newDelay);

updateEntry( long tokenToFind, DelayInterval newDelay);

removeEntry() //移除实体,但是不删除

DelayInterval const& timeToNextAlarm();

handleAlarm();

 

 

d)      UsageEnvironment.hh

1.      UsageEnvironment类,这是一个抽象的基类

void reclaim();//回收,当没有剩余的状态时,删除自己

taskScheduler()  //任务调度程序

//结果信息的处理

getResultMsg();

setResultMsg();

setResultErrMsg();

appendToResultMsg();   //like setResultMsg(), except that an 'errno' message is appended

reportBackgroundError();//用于报告后台预先设置的错误的信息

getErrno(); // ‘errno’

UsageEnvironment& operator<<(); //console output

 

2.      TaskScheduler类,任务调度类,是一个抽象的基类

virtual TaskToken scheduleDelayedTask(nt64_t microseconds, TaskFunc* proc,void* clientData)  //当我们下一个达到调度点的,调度一个任务(在一个延迟之后)。(Does not delay, if “microseconds”<=0,)。返回一个token,可用于以后的unscheduleDelayTask()的调用。

virtual void unscheduleDelayedTask(TaskToken& prevTask);  //设置”prevTask”=NULL(如果prevTask==NULLno effect

virtual void rescheduleDelayedTask()        // Combines "unscheduleDelayedTask()" with "scheduleDelayedTask()"  (setting "task" to the new task token).

typedef void BackgroundHandlerProc(void* clientData, int mask); // handing sockets reads in the background

virtual void turnOnBackgroundReadHandling () //打开后台socket读取

virtual void turnOffBackgroundReadHandling () //关闭后台socket读取

virtual void doEventLoop(char* watchVariable = NULL) // Stops the current thread of control from proceeding, but allows delayed tasks (and/or background I/O handling) to proceed.(If "watchVariable" is not NULL, then we return from this routine when *watchVariable != 0)

相关文章推荐

Linux 下使用USB 网络

Andrew Huang 转载请注明作者及联络方式.  在介绍USB的驱动开发时,我通常会用用Linux的的USB网络来演示,它兼容RNDIS网络,一台Linux即可充当USB的d...

live555 接收rtsp视频流详细源码流程详细解析

程序从rtsp_player_task这个线程开始进入进入到live555的客户端。 1:char *argv[5]={"openRTSP", "-b", "80000", "-t", ""};这是...

Live555源码解析(2) - RTSP协议概述

上一篇Live555源码解析(1) - Main 寻根问祖,留其筋骨将main()函数脉络做了整体分析,理论上本篇将从服务器的创建开始讲起,但众所周知,Live555媒体服务器是RTSP服务器的实现,...

Live555源码解析(3) - 服务开启,愿者上钩

上一篇Live555源码解析(2) - RTSP协议概述对RTSP进行了整体介绍,对会话交互过程及通常应用场景做了示例。接下来,我们就从媒体服务器的本职工作服务开始谈起。 1. 从服务器说起要服务,...

基于live555的rtsp封装rtspperf的客户端源码解析

项目地址:http://sourceforge.net/projects/rtspperf/ 实现了基于epoll模型的TaskScheduler,而live555默认实现使用select模型,se...

live555源码20150807版本

  • 2015年08月31日 15:30
  • 602KB
  • 下载

Clion下面编译live555源码

  • 2016年11月02日 16:03
  • 3.02MB
  • 下载

庖丁解牛-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建立过程)

live555MediaServer.cpp服务端源码讲解(testRelay.cpp,http://blog.csdn.net/smilestone_322/article/details/1892...
  • maopig
  • maopig
  • 2015年10月14日 18:03
  • 7546

live555 源码

  • 2017年11月14日 16:06
  • 615KB
  • 下载

android ndk下编译的live555源码(新版)

  • 2013年02月16日 11:25
  • 3.81MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: live555源码初步解析(一)
举报原因:
原因补充:

(最多只允许输入30个字)