您的位置:首页 > 其它

开源项目live555学习心得(一)

2011-02-28 11:36 204 查看
http://blog.csdn.net/huangxinfeng/archive/2010/03/11/5369391.aspx

最近因项目开发需要,开始学习开源项目
live555

,特别将个人的一些学习心得做一下记录,如有理解不正确之处,欢迎各位朋友指出。

首先是源码的下载,这可以从 http://www.live555.com
上下载,同时上面亦提供了相关的文档,文档虽较为粗糙,但总比找不到任何文档说明强。当然,我在学习的过程中,也从网上查找了一段时间,收获还是有一点的,其中就有诸如:
RTSP

服务器实例
live555

源代码分析、
live555

源代码简介、
live555

代码解读系列、基于
live555


rtp-rtcp

研究等文章。

我的学习是在
VS2008

环境下进行的,要能够在
VS

环境下顺利进行,还得做相关工作。
live

开源虽说是用
C++

写的,代码风格也非常优秀,但是其是用
makefile

文件来做的,而对未接触过
makefile

文件的我是一个问题。幸运的是在网上偶然发现了一篇介绍在
VC6

环境下编译
live

的文章,然后照着上面所说的做,磕磕碰碰,编译成功了四个库并转移到了
VS2008

环境中。更幸运的是又是偶然在网上发现了一篇介绍用
VS2008

编译
live

的文章并提供了编译后的工程下载,
download

,然后就开始了相对漫长的学习过程。

从程序的结构来看,
live

项目包括了四个基本库、程序入口类(在
mediaServer

中)和一些测试代码(在
testProgs

中)。四个基本库是
UsageEnvironment


BasicUsageEnvironment


groupsock


liveMedia



UsageEnvironment

包括抽象类
UsageEnvironment

和抽象类
TaskScheduler

,这两个类用于事件调度,其中包括实现了对事件的异步读取、对事件句柄的设置及对错误信息的输出等;该库中还有一个
HashTable

,这是一个通用的
HashTable

,在整个项目中都可以使用它,当然该
HashTable

也是一个抽象类。

BasicUsageEnvironment

中的类主要是对
UsageEnvironment

中对应类的实现。

groupsock

,顾名思义,用于数据包的接收和发送,其同时支持多播和单播。
groupsock

库中包括了
GroupEId


Groupsock


GroupsockHelper


NetAddress


NetInterface

等类,其中
Groupsock

类有两个构造函数,一个是“
for a source-independent multicast group

”,另一个是“
for a source-specific multicast group

”;而
GroupsockHelper

类主要用于读写
Socket



liveMedia

是很重要的一个库,其不仅包含了实现
RTSP Server

的类,还包含了针对不同流媒体类型(如
TS

流、
PS

流等)编码的类。在该库中,基类是
Medium

,层次关系非常清晰。在该库中,有几个很重要的类,如
RTSPServer


ServerMediaSession


RTPSink


RTPInterface


FramedSource

等。

http://www.live555.com
上的相关文档中提到穿透防火墙的问题,方法是开启一个
HTTP


tunnel

,然后我们可以在
liveMedia

库中找到一个
RTSPOverHTTPServer

的类,该类解决了这样的问题。

mediaServer

下的
live555MediaServer

提供了
main

函数,
DynamicRTSPServer

继承了
RTSPServer

并重写了虚函数
lookupServerMediaSession



整个项目的程序结构大体上就是这样,至于其中的一些具体实现细节,还需要进一步学习研究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: