live555的代码理解

 

https://blog.csdn.net/li_wen01/article/details/51762040

live555为流媒体提供解决方案的平台的c++开源库。

1.各个库的介绍

         LIVE555下包含LiveMedia、UsageEnvironment、BasicUsageEnvironment、GroupSock库,MediaServer简单服务器程序以及其他多个测试demo。

1.1LiveMedia

包含一系列处理不同编码格式和封装格式的类,基类是Medium(live/liveMedia/include/Media.hh)。

 

1.2UsageEnvironment

         环境类,用于错误信息的输出。LIVE555中多数类中均包含此类对象指针。其内部包含TaskSchedule抽象类的指针,该类用于任务调度,因此所有包含UsageEnvironment指针的类均可将自己加入到调度中。

 

1.3BasicUsageEnvironment

         包含具体环境类和具体TaskScheduler类。UsageEnvironment用于对错误信息的处理,BasicUsageEnvironment类用于以控制台方式输出错误信息。因此想要以其他方式输出错误信息的类,可以从UsageEnvironment派生。BasicTaskSchedule类继承自TaskScheduler抽象类,用以定义具体的调度策略。任何基于LIVE555的应用程序均需要定义自己的BasicEnvironment和TaskScheduler库。如果创建窗口应用程序,在重定义TaskScheduler时,需要与图形环境自己的事件处理框架集成。BasicTaskSheduler使用select模型实现事件的获取和处理。如果想使用更高效的IOCP模型,可以定义自己的BasicTaskScheduler类。BasicTaskScheduler内部有一个循环,循环读取队列中的消息并处理。整个基于BasicTaskScheduler的程序只有一个线程驱动。

1.4GroupSock

         对各种socket操作的封装,用于收发数据。主要面向组播,但也可以进行单播的收发数据,仅支持UDP,不支持TCP。

1.5 MediaServer 服务器程序

         该程序使用BasicUsageEnvironment库实现,因此是一个控制台程序。任务调度类是BasicTaskScheduler类,因此使用Select模型且仅有一个线程在循环处理各种事件。

 

 

         LIVE555中大量使用简单工厂模式,每个子类均有一个CreateNew静态成员。该子类的构造函数被设置为Protected,因此在外部不能直接通过new来构造。同时,每个类的构造函数的参数中均有一个指向UsageEnvironment的指针,从而可以输出错误信息和将自己加入调度。

 

MediaSouce是所有Souce的基类,MediaSink是所有Sink的基类。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章