作者:咕唧咕唧liukun321

来自:http://blog.csdn.net/liukun321

上一篇文章简要介绍了怎样以共享库的方式交叉编译Live555,今天再来介绍live源代码框架。

先对live555有一个宏观的认识,为今后的实战打个基础。

liveMedia项目的源代码包含四个主要的库,各种測试代码以及IVE555 Media Server。四个主要的库各自是UsageEnvironment&TaskScheduler,groupsock,liveMedia,BasicUsageEnvironment。

这几个类都是整个系统的基础功能类,这些都是抽象类,在应用程序中基于这些类实现自己的子类。

UsageEnvironment:代表了整个系统运行的环境,它提供了错误记录、报告和log输出的功能,不管哪一个类要输出错误,就须要保存UsageEnvironment的指针(比如:能够通过

UsageEnvironment* env;
UsageEnvironment* env =BasicUsageEnvironment::createNew(*scheduler);
*env << "Play this stream usingthe URL \"

这样的操作能够实现log的输出。

TaskScheduler:则提供了任务调度功能.整个程序的运行发动机就是它,它调度任务。运行任务(任务就是一个函数).TaskScheduler因为在全局中仅仅有一个,所以保存在了UsageEnvironment中.而全部的类又都保存了UsageEnvironment的指针。所以谁想把自己的任务增加调度中,那是非常easy的.

在此还看到一个结论:整个live555(服务端)仅仅有一个线程.当然如今有网友已经实现了服务端的多线程.

Groupsock:类是对网络接口的封装。用于收发数据包。

这个是放在单独的库Groupsock中。它封装了socket操作,增加了多播放支持和一对多单播的功能.同一时候支持UDP和TCP协议传输,两种方式可供选择。它管理着一个本地socket和多个目的地址,仅仅需知道对方地址和port就可以发送数据。Groupsock的构造函数有一个參数是struct in_addr const& groupAddr,在构造函数中首先会调用父类构造函数创建socket对象,然后推断这个地址。若是多播地址,则增加多播组。

Groupsock的两个成员变量destRecord* fDests和DirectedNetInterfaceSet fMembers都表示目的地址集和。但我始终看不出DirectedNetInterfaceSet fMembers有什么用,且DirectedNetInterfaceSet是一个没有被继承的虚类,看起来fMembers没有什么用。仅fDesk也够用了,在addDestination()和removeDestination()函数中就是操作fDesk。增加或删除目的地址。

BasicUsageEnvironment:主要是针对简单的控制台应用程序,利用select实现事件获取和处理。

HashTable:实现了哈稀表.

DelayQueue:译为"延迟队列",它是一个队列,每一项代表了一个要调度的任务(在它的fToken变量中保存).同一时候保存了这个任务离运行时间点的剩余时间.能够预见,它就是在TaskScheduler中用于管理调度任务的东西.注意,此队列中的任务仅仅被运行一次!运行完后这一项即被抛弃!

HandlerSet:Handler集合.Handler是什么呢?它是一种专门用于运行socket操作的任务(函数),HandlerSet被TaskScheduler用来管理全部的socket任务(增删改查).所以TaskScheduler中如今已调度两种任务了:socket任务(handlerSet)和延迟任务(DelayQueue).事实上TaskScheduler还调度第三种任务:Event,后面再说.

以上各关系见例如以下UML图:

liveMedia: 库中有一系列类,基类是Medium,这些类针对不同的流媒体类型和编码。

这里还要再说明一下Sink  source,这两者的概念及关系:

liveMedia库中Sink就是消费数据的对象,比方把接收到的数据存储到文件,这个文件就是一个Sink。
Source就是生产数据的对象。比方通过 RTP读取数据。数据流经过多个source和sinks。

继承Medium基类的类,及他们间的关系见例如以下UML图:

到此,我们已经对Live555基类和框架有了一个初步的认识。这对我们今后将live555灵活运用到实际项目中起了至关关键的数据。

后面会用几篇博文,通过解说实例代码的方式。直观阐述live555在嵌入式系统中视频转播、直播中的应用。

Live555 实战之框架简单介绍的更多相关文章

  1. Django - Django框架 简单介绍

    Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...

  2. jQuery系列 第一章 jQuery框架简单介绍

    第一章 jQuery框架简单介绍 1.1 jQuery简介 jQuery是一款优秀的javaScript库(框架),该框架凭借简洁的语法和跨平台的兼容性,极大的简化了开发人员对HTML文档,DOM,事 ...

  3. Python -- Scrapy 框架简单介绍(Scrapy 安装及项目创建)

    Python -- Scrapy 框架简单介绍 最近在学习python 爬虫,先后了解学习urllib.urllib2.requests等,后来发现爬虫也有很多框架,而推荐学习最多就是Scrapy框架 ...

  4. Rebound动画框架简单介绍

    Rebound动画框架简单介绍 Android菜鸟一枚,有不对的地方希望大家指出,谢谢. 最近在接手了一个老项目,发现里面动画框架用的是facebook中的Rebound框架,由于以前没听说过,放假时 ...

  5. 【FIORI系列】SAP OpenUI5 (SAPUI5) js框架简单介绍

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[FIORI系列]SAP OpenUI5 (SA ...

  6. Spring框架简单介绍

    原文地址:  http://my.oschina.net/myriads/blog/37922 1.使用框架的意义与Spring的主要内容 随着软件结构的日益庞大,软件模块化趋势出现,软件开发也须要多 ...

  7. MoQ(基于.net3.5,c#3.0的mock框架)简单介绍

    我们在做单元测试的时候,常常困扰于数据的持久化问题,很多情况下我们不希望单元测试影响到数据库中的内容,而且受数据库的影响有时我们的单元测试的速度会很慢,所以我们往往希望将持久化部分隔离开,做单元测试的 ...

  8. .NET 框架简单介绍

    初学.NET肯定会有一系列的疑问,比方(下面为自己的疑问): 1) 何为. NET框架.它都包括哪些东西? 2) 程序集是什么.它是怎样在CLR(通用语言执行时)中执行的? 3) C#与VB.NET同 ...

  9. Python: Flask框架简单介绍

    接触Python之后我第一次听说Flask,我就根据自己搜罗的知识尽可能简洁的说出来.如果不准确的地方还请指正,谢谢. Flask是什么?             Flask是基于Python编写的微 ...

随机推荐

  1. HDU 1853Cyclic Tour(网络流之最小费用流)

    题目地址:pid=1853">HDU1853 费用流果然好奇妙. .还能够用来推断环...假设每一个点都是环的一部分并且每一个点仅仅能用到一次的话,那每一个点的初度入度都是1,这就能够 ...

  2. Android 使用新浪微博SSO授权

    新浪微博SSO授权,很早就做好了,只是一直没有时间整理博客,今天加班,晚上闲暇之时便想到整理一下.由于整个七月份很忙,加班很多.前段时间把腾讯微博的SSO认证整理好了.想在七月份翻篇之前再写点东西.好 ...

  3. 在Ubuntu下的Apache上建立新的website,以及enable mono

    1. 在Apache下建立新的web site a. $>cd /etc/apache2/ b. $>vi ports.conf 填加Listen 8090(注意不要打开8080,因为To ...

  4. css中表格的table-layout属性特殊用法

    table-layout: 属性1:auto,使用它,表格的大小由单元格里的内用决定,即td的宽高由内容的多少而变化. 属性2:fixed,如果内容是中文的话td的宽高固定,宽高有内容决定,没有限制. ...

  5. NeralJS需求整理及思路

    NeralJs希望通过解析json数据,动态创建和渲染报表,每个报表呈现一定时间范围的数据,通过使用表格图表等不同的方式,使数据的呈现不死板,且更容易看出规律. 说通俗点,就是动态在一个区域内生成多张 ...

  6. Aspose.Cells for .NET 8.5.0 工具类

    基于 Aspose.Cells for .NET 8.5.0 工具类, Aspose.Cells for .NET 8.5.0 这个自己去CSDN下载里面有破解的,没有破解的导出excel的时候会(A ...

  7. 在div+css中用到的js代码注意return

    今天做了一个项目,美工做好后放在了form中(没有加runat=server),由于用到了服务器控件,所以这里要加,否则报错,关键一段div代码是: <form id="form_re ...

  8. C# 计算日期时间的间隔天数

    DateTime oldDate = ,,); DateTime newDate = DateTime.Now; // Difference in days, hours, and minutes. ...

  9. Apache Tomcat 7.0 Manager APP

    解决Tomcat 7.0 进入项目管理页面时的密码问题 根据红框中的提示得知缺少manager管理角色,所以我们到Tomcat的conf文件夹下找到tomcat-users.xml文件,添加管理角色, ...

  10. 修改Servlet模板

    1.找到jar文件 查看MyEclipse根目录下的myeclipse.ini,找到Common文件夹的位置,打开文件夹..\Common\plugins 找到文件 com.genuitec.ecli ...