Live555 Streaming Media

原文在这里 -> http://www.live555.com/liveMedia/


这份代码由一系列使用开放标准协议(RTP/RTCPRTSPSIP)的C++多媒体流库文件组成。这些库文件可以在Unix(包括LinuxMac OS X)、WindowsQNX下编译,之后即可用于构建流媒体应用程序。这些库文件已被用于实现LIVE555 Media ServerLIVE555 Proxy ServerRTSP服务器应用)、liveCasterplayRTPMPEG(使用RTP/RTCP流化MP3文件)和vobStreamer(使用RTP/RTCP/RTSP流化DVD内容)。这些库还可以由于流化、接收、处理MPEGH.264H.263+DVJPEG图像和许多音频编码格式的文件。他们可以容易地扩张以支持其他编码格式,还可以用来构建基本的RTSPSIP客户端、服务端。目前已被应用在一些支持流媒体的播放器上,比如VLCMPlayer。(如何使用这些库文件的相关例子可以在下面的test program找到)。

 

源代码

项目源码包含在“.tar.gz”文件中,下面介绍如何编译他。

 

你正在计划实现RTP(或者RTSPSIP)吗?除了自己从头开始写,可以考虑使用这些库。他们已经应用在许多基于RTP协议的应用中了,并且在嵌入式设备中表现良好。这些代码包括一个实现的RTCP,而且可以轻易地扩展(通过继承)来支持新的RTP负载格式。

------------------------------------------------------------------------------------------

1、描述(包括test programs

2、如何在Unix上配置和编译代码

3、如何在Windows上配置和编译代码

4FAQ

5、源码许可

6todo…

7、一些第三方的应用

----------------------------------------------------------------------------------------------

描述

这份代码包括下面的库,每个都在自己的目录下:

 

UsageEnvironment

 

UsageEnviroment”和“TaskScheduler”类用来安排延迟的事件、为异步的读取事件分派处理者、输出错误/警告信息。并且,“HashTable”这个类为通用的hash table定义了接口,被其他的代码使用。

 

这些都是虚拟的基类,他们必须被继承使用。继承的子类可以用来为应用程序实现一些特殊的功能——例如,GUI或者脚本运行环境。

 

groupsock

 

在这个库里的类封装了网络操作的接口和socket,比如,“Groupsocket”类分装了一个用于发送或接收多播数据包的socket

 

liveMedia

 

这个库定义看一个类树——根部是“Medium”类——用于各种流媒体类型和编码。

 

BasicUsageEnvironment

 

这个库定义了一个“UsageEnvironment”类的具体实现,用于简单的控制台程序。读取事件和延迟操作通过一个select()方法的循环来处理。

---------------------------------------------------------------------------------------------------

testProgs

 

在这个目录下使用“BasicUsageEnvironment”实现了一些简单的程序来说明如何使用这些库来开发一个应用程序。

 

RTSPclient

  • testRTSPClient是一个命令行程序,可以为你展示如何打开和接收指定RTSP URL的媒体流——注:URLrtsp://开头

在这个演示程序里,对接收到的音/视频数据没有做任何操作。然而,你可以在你的应用程序中使用或者适配这份代码,对接收到的数据解码或者播放什么的。

  • openRTSP与“testRTSPClient”相似,但是包含了更多特性。他是一个命令行程序,但是与“testRTSPClient”不同的是,他被打算用作一个完整的全功能应用(而不是被当做其他程序代码的一部分)。更多关于“openRTSP”的信息,包括他的各种命令行选项,请参照在线文档。

RTSPserver

  • testOnDemandRTSPServer创建了一个RTSP服务器,通过RTP单播来流化点播的各种格式的媒体文件。(支持的媒体格式包括:MPEG-1/2音视频,包括MP3MPEG-4H.264MPEG Program orTransport 流,包括VOB文件;DVARMWAV)服务器也可以流化Matroska或者WebM文件(在文件中解复用和流化tracks)。MPEG Transport Streams也可以通过原始的UDP来流化。

SIPclient

  • playSIP是一个命令行程序(类似“openRTSP”),用来呼叫一个SIP会话(使用sipURL),然后(可选的)将接受的媒体流记录在一个文件中。

MP3 audiotest programes

  • testMP3Streamer反复地从一个MPEG-1/2视频文件(test.mpg),通过RTP流化并传到多播组239.255.42.42,端口8888RTCP使用端口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+videoProgram Streamtest programs

  • testMPEG1or2AudioVideoStreamer读取一个MPEG-1 or 2 Program Stream 文件(test.ts),然后RTP流化,多播组239.255.42.43,端口1234RTCP端口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

是你的系统平台——比如“linux”或者“solaris”——在“config.”文件中定义的。这将在“live”目录和其子目录下各产生一个Makefile。然后运行“make.

  • 如果“make”失败了,你可能需要对“config.”文件做一些修改,然后重新运行“genMakefiles”。(例如,你可能需要添加额外的“-IflagCOMPILE_OPTS定义处)
  • 一些用户(特别是FreeBSD用户)反馈GNU version of "make"——通常叫"gmake"——比默认的要运行的好,预先安装"make"版本。(例如,你应该使用"gmake",如果你在"ar"命令时遇到了程序链接的问题)
  • 如果你在使用"gcc"3.0版本或者更高,你可能需要添加 -Wno -deprecated标记到CPLUSPLUS_FLAGS
  • 如果没有你所用系统的"config."文件,那就试着对照现有的文件自己写一个吧。

没有官方的安装步骤,你可以将"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 Studioversion 5或更高)做编译环境,如果你使用的是Borland的开发工具,上面的说明就需要做如下的修改:

1、在运行"genWindowsMakefiles.cmd"脚本之前,将所有的"win32cnfig"替换为"win32config.Borland"

2、在运行"genWindowsMakefiles"之后,按如下提示编辑新生成的MakeFiles

------------------------------------------------------------------------------------------------------------

To do…

 

  • 扩展"liveMedia"库以支持更多的媒体格式和编码;
  • 提供额外的"UsageEnvironment"子类实现——比如用于脚本环境,想TclPythonPerl什么的;
  • 扩展RTCP的实现以支持更多的SDES条目(other than just CNAME),对接收的RTCP数据包有更完善的处理;
  • 在代码中使用数据格式像"unsighed"的地方,指定数据的长度是需要的(比如32bits),像这样的数据类型都应该修改;
  • 修改"groupsock"的实现来让他支持IPV6
  • 改为使用ISO标准的C++头文件;
  • 将网络操作socket"groupsock")实现为"liveMedia"的源;
  • 添加SRTP或者RTSP-over-TLS是支持


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
找到一个在windows下成功编译的博客,经测可用!
环境win7、vs2010、live555_2012.11.30

地址 -> http://www.cnblogs.com/skyseraph/archive/2012/04/11/2442840.html



你可能感兴趣的:(Live555 Streaming Media)