一、Live555介绍
1、Live555项目介绍
Live555 是一个开源的流媒体项目,包括了几个使用开放标准协议(RTP/RTCP、RTSP、SIP)的 C++ 库。这些库可以在 Unix(包括 Linux 和 Mac OS X)、Windows 以及其他 POSIX 兼容系统编译,并用于构建流应用程序,例如源码里实现的程序 live555MediaServer 和 live555ProxyServer。另外,这些库还可用于流式传输、接收和处理 MPEG、H.265、H.264、H.263+、DV 或 JPEG 视频以及多种音频编码。它们可以轻松扩展以支持其他(音频/视频)编解码器,也可用于构建基本的 RTSP 或 SIP 客户端和服务器。在现有的媒体播放器程序中利用这些库添加多媒体流支持的有“VLC ”和“MPlayer”等。
2、官网及帮助文档介绍
Live555的官网地址: http://www.live555.com
Live555源码下载地址:http://www.live555.com/liveMedia/public/
Live555描述文档地址:http://www.live555.com/liveMedia/#description
Live555数据结构说明:http://www.live555.com/liveMedia/doxygen/html/annotated.html
Live555类层次结构介绍:http://www.live555.com/liveMedia/doxygen/html/inherits.html
Live555源文件简要说明:http://www.live555.com/liveMedia/doxygen/html/files.html
二、源码目录结构
源码解压后,进入live目录,会有几个文件夹,每个目录的源码会组成一个单独的库或多个应用程序。下面对几个重要文件夹做个简单介绍,更详细的介绍可以看官网的描述文档。
1、UsageEnvironment
这个目录包括了8个源码文件,编译完成后会生成 libUsageEnvironment.a 库文件,根据官网说明,这个库包含3个类,“UsageEnvironment”类和“TaskScheduler”类用于调度延迟任务、为异步读取事件分配任务 以及 输出错误/警告消息。 此外,“HashTable”类定义了通用哈希表的接口,供其余代码使用。
这几个都是抽象基类(有纯虚函数);它们必须在子类实例化后才能使用。 这些子类可以利用程序运行环境的特定属性,例如它的 GUI 和/或脚本环境。
2、BasicUsageEnvironment
BasicUsageEnvironment 目录总共有12个源码文件,编译后生成libBasicUsageEnvironment.a,该库定义了“UsageEnvironment”类的一个具体实现(即子类),用于简单的控制台应用程序。 使用 select() 循环处理读取事件和延迟操作。
3、groupsock
groupsock 目录总共有12个源码文件,编译后生成 libgroupsock.a,这个库中的类封装了网络接口和套接字,尤其是“Groupsock”类封装了一个用于发送/或接收多播数据报的套接字。
4、liveMedia
liveMedia目录的源码文件在300个左右,是Live555的核心库,定义了从“Medium”类继承的各个层次的类,主要用于处理各种流媒体类型和多媒体流的编解码。
5、mediaServer
mediaServer目录包含4个文件,编译完成后生成 live555MediaServer,是利用前面的4个库实现的流媒体服务器。
6、proxyServer
proxyServer目录包含1个源文件,编译完成后生成 live555ProxyServer,是利用前面的4个库实现的流媒体转发服务器。
7、testProgs
该目录实现了一些简单的程序来演示如何使用这些库开发应用程序。例如:
testRTSPClient 演示了如何打开和接收由 RTSP URL(rtsp://xx.xx.xx.xx) 指定的媒体流; testOnDemandRTSPServer 创建一个 RTSP 服务器,该服务器可以通过 RTP 单播从各种类型的媒体文件中按需流式传输。 playSIP 是一个命令行程序(类似于“openRTSP”),它调用 SIP 会话(使用 sip: URL),然后(可选)将传入的媒体流记录到文件中。 testMP3Streamer 反复读取 MP3 音频文件(名为“test.mp3”),并使用 RTP 将其流式传输到多播组 239.255.42.42,端口 6666(RTCP 使用端口 6667)。 该程序还有一个(可选的)内置 RTSP 服务器。 testMP3Receiver 则相反,它读取 MP3/RTP 流(来自同一个多播组/端口),并将重构的 MP3 流输出到“stdout”。 它还发送 RTCP 接收报告。 ◦ 或者,可以使用这些工具之一播放 MP3/RTP 流。
文件夹内,还有多个其他的演示程序,读者可以在需要用到时查询官网的说明文档。
8、WindowsAudioInputDevice
这是“liveMedia”库的“AudioInputDevice”抽象类的一个实现。 Windows 应用程序可以使用它从输入设备读取 PCM 音频样本。这个目录会构建了两个库:“libWindowsAudioInputDevice_mixer.lib”使用 Windows 的内置混音器;“libWindowsAudioInputDevice_noMixer.lib”不使用 Windows 的内置混音器。
总结
Live555的源码目录有8个文件夹,其中 UsageEnvironment、BasicUsageEnvironment、groupsock、liveMedia 四个目录比较重要,会生成4个库,我们在利用Live555开发自己的程序时会用到这几个库。
Live555源码阅读笔记(一):源码介绍文档 及 源码目录结构