原文在这里 -> http://www.live555.com/liveMedia/
这份代码由一系列使用开放标准协议(RTP/RTCP,RTSP,SIP)的C++多媒体流库文件组成。这些库文件可以在Unix(包括Linux和Mac OS X)、Windows和QNX下编译,之后即可用于构建流媒体应用程序。这些库文件已被用于实现LIVE555 Media Server、LIVE555 Proxy Server(RTSP服务器应用)、liveCaster、playRTPMPEG(使用RTP/RTCP流化MP3文件)和vobStreamer(使用RTP/RTCP/RTSP流化DVD内容)。这些库还可以由于流化、接收、处理MPEG、H.264、H.263+、DV、JPEG图像和许多音频编码格式的文件。他们可以容易地扩张以支持其他编码格式,还可以用来构建基本的RTSP和SIP客户端、服务端。目前已被应用在一些支持流媒体的播放器上,比如VLC和MPlayer。(如何使用这些库文件的相关例子可以在下面的test program找到)。
源代码
项目源码包含在“.tar.gz”文件中,下面介绍如何编译他。
你正在计划实现RTP(或者RTSP、SIP)吗?除了自己从头开始写,可以考虑使用这些库。他们已经应用在许多基于RTP协议的应用中了,并且在嵌入式设备中表现良好。这些代码包括一个实现的RTCP,而且可以轻易地扩展(通过继承)来支持新的RTP负载格式。
------------------------------------------------------------------------------------------
1、描述(包括test programs)
2、如何在Unix上配置和编译代码
3、如何在Windows上配置和编译代码
4、FAQ
5、源码许可
6、todo…
7、一些第三方的应用
----------------------------------------------------------------------------------------------
描述
这份代码包括下面的库,每个都在自己的目录下:
UsageEnvironment
“UsageEnviroment”和“TaskScheduler”类用来安排延迟的事件、为异步的读取事件分派处理者、输出错误/警告信息。并且,“HashTable”这个类为通用的hash table定义了接口,被其他的代码使用。
这些都是虚拟的基类,他们必须被继承使用。继承的子类可以用来为应用程序实现一些特殊的功能——例如,GUI或者脚本运行环境。
groupsock
在这个库里的类封装了网络操作的接口和socket,比如,“Groupsocket”类分装了一个用于发送或接收多播数据包的socket。
liveMedia
这个库定义看一个类树——根部是“Medium”类——用于各种流媒体类型和编码。
BasicUsageEnvironment
这个库定义了一个“UsageEnvironment”类的具体实现,用于简单的控制台程序。读取事件和延迟操作通过一个select()方法的循环来处理。
---------------------------------------------------------------------------------------------------
testProgs
在这个目录下使用“BasicUsageEnvironment”实现了一些简单的程序来说明如何使用这些库来开发一个应用程序。
RTSPclient
- testRTSPClient是一个命令行程序,可以为你展示如何打开和接收指定RTSP URL的媒体流——注:URL以rtsp://开头
在这个演示程序里,对接收到的音/视频数据没有做任何操作。然而,你可以在你的应用程序中使用或者适配这份代码,对接收到的数据解码或者播放什么的。
- openRTSP与“testRTSPClient”相似,但是包含了更多特性。他是一个命令行程序,但是与“testRTSPClient”不同的是,他被打算用作一个完整的全功能应用(而不是被当做其他程序代码的一部分)。更多关于“openRTSP”的信息,包括他的各种命令行选项,请参照在线文档。
RTSPserver
- testOnDemandRTSPServer创建了一个RTSP服务器,通过RTP单播来流化点播的各种格式的媒体文件。(支持的媒体格式包括:MPEG-1/2音视频,包括MP3;MPEG-4;H.264;MPEG Program orTransport 流,包括VOB文件;DV;ARM;WAV)服务器也可以流化Matroska或者WebM文件(在文件中解复用和流化tracks)。MPEG Transport Streams也可以通过原始的UDP来流化。
SIPclient
- playSIP是一个命令行程序(类似“openRTSP”),用来呼叫一个SIP会话(使用sip:URL),然后(可选的)将接受的媒体流记录在一个文件中。
MP3 audiotest programes
- testMP3Streamer反复地从一个MPEG-1/2视频文件(test.mpg),通过RTP流化并传到多播组239.255.42.42,端口8888(RTCP使用端口8889)。这个程序也有一个内建的RTSP server。
- testMPEG1or2VideoReceiver做相反的事:读取一个MPEG video/RTP流(从相同的多播组/端口),输出重组的MPEG视频流到“stdout”,他也可以发送RTCP报文。
- testMPEG4VideoStreamer从一个MPEG-4流数据视频文件(test.m4e)中反复读取,并且通过RTP多播流化。这个程序也有一个内建的RTSP server。
- testH64VideoStreamer从一个从一个H264流数据视频文件(test.264)中反复读取,并且通过RTP多播流化。这个程序也有一个内建的RTSP server。
MPEG audio+video(Program Stream)test programs
- testMPEG1or2AudioVideoStreamer读取一个MPEG-1 or 2 Program Stream 文件(test.ts),然后RTP流化,多播组239.255.42.43,端口1234(RTCP端口1235)。内建的RTSP server;
- testMPEG2TransportReceiver做相反的事;
- testMPEG1or2ProgramTotransportStream读取MPEG-1/2 MPEG Program Streams文件(in.mpg),然后转化为等价的MPEG Transport Streams文件(out.ts);
- testH264VideoToTransportStream读取H.264文件(in.264),并把它转化为一个等价的MPEG Transport Streams文件(out.ts);
…
…
-------------------------------------------------------------------------------------------------------------
如何在Unix上配置和编译代码
源代码文件(.tar.gz)。使用“tar-x”和“gnuzip”(或者“tar -xz”,ifavailable)解压,cd到“live”目录,run
./genMakefiles <os-platform>
<os-platform>是你的系统平台——比如“linux”或者“solaris”——在“config.<os-platform>”文件中定义的。这将在“live”目录和其子目录下各产生一个Makefile。然后运行“make”.
- 如果“make”失败了,你可能需要对“config.<os-platform>”文件做一些修改,然后重新运行“genMakefiles<os-platform>”。(例如,你可能需要添加额外的“-I<dir>”flag到COMPILE_OPTS定义处)
- 一些用户(特别是FreeBSD用户)反馈GNU version of "make"——通常叫"gmake"——比默认的要运行的好,预先安装"make"版本。(例如,你应该使用"gmake",如果你在"ar"命令时遇到了程序链接的问题)
- 如果你在使用"gcc"的3.0版本或者更高,你可能需要添加 -Wno -deprecated标记到CPLUSPLUS_FLAGS。
- 如果没有你所用系统的"config.<od-platform>"文件,那就试着对照现有的文件自己写一个吧。
没有官方的安装步骤,你可以将"live/"目录放置到任何地方,但是你必须保证目录结构是完整的。你可能需要照着下面的做:
rm -rf /usr/local/lib/liv ; cp -r live /usr/local/lib
或者,你可以直接拷贝那些二进制库文件。
------------------------------------------------------------------------------------------------------------
如何在Windows上配置和编译代码
1、解压".tar.gz"文件;
2、如果在你电脑上的'tools'目录不是"c:\ProgramFiles\DecStudio\Vc",就需要更改"win32config"文件里的"TOOLS32="这一行;
3、这命令行下,cd到"live"目录,然后运行
genWindowsMakefiles
这将会通过Microsoft Visual Studio各个子目录下生成一个"*.mak"的可使用的makfile文件。
- 如果你在使用Unix的机器,你可以通过运行下面的命令来生成windows makefiles
./genWindowsMakefiles
(之后如果有必要,将"TOOL32="这一行修改)然后再将"live"文件夹拷贝到windows的机器上面;
- 为了在Visual Studio中使用这些MakeFile,使用"Open Workspace"菜单命令,然后(在文件选择对话框)点"Files of type",选择"Makefiles(.mak)"。Visual Studio之后会提示你是否使用这个Makefile来建立一个新的工程,选择"OK";
- 注意,你需要在编译"testProgs"之前,先分别编译"UsageEnvironment"、"groupsock"、"liveMedia"和"BasicUsageEnvironment"这些工程;
- 如果愿意,你也可以顺便把"WidowsAudioInputDevice"这个工程编译了;
- Doug Kosovic的提醒:Visual C++2003 不包含old I/O Stream头文件iostream.h et al,或者相关的库msvcirt.lib。因此想要用VC++ 2003编译Live555的代码可能需要下面的建议:一个不需要修改源码的方式是从VC++ 2002上拷贝缺少的头文件和msvcirt.lib库,在文件'win32config'中添加一个额外的 -I指向COMPILE_OPTS以查找到讲旧的头文件,添加-LIBPATH:指向LINK_OPTS_0以查找msvcirt.lib文件。
如果你使用Borland C++编译器
上面的说明针对Microsoft Visual Studio(version 5或更高)做编译环境,如果你使用的是Borland的开发工具,上面的说明就需要做如下的修改:
1、在运行"genWindowsMakefiles.cmd"脚本之前,将所有的"win32cnfig"替换为"win32config.Borland";
2、在运行"genWindowsMakefiles"之后,按如下提示编辑新生成的MakeFiles。
------------------------------------------------------------------------------------------------------------
To do…
- 扩展"liveMedia"库以支持更多的媒体格式和编码;
- 提供额外的"UsageEnvironment"子类实现——比如用于脚本环境,想Tcl、Python、Perl什么的;
- 扩展RTCP的实现以支持更多的SDES条目(other than just CNAME),对接收的RTCP数据包有更完善的处理;
- 在代码中使用数据格式像"unsighed"的地方,指定数据的长度是需要的(比如32bits),像这样的数据类型都应该修改;
- 修改"groupsock"的实现来让他支持IPV6;
- 改为使用ISO标准的C++头文件;
- 将网络操作socket("groupsock")实现为"liveMedia"的源;
- 添加SRTP或者RTSP-over-TLS是支持