相关资料:
Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现 了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+、DV、JPEG视频和多种音频编码。同时由于良好的设 计,Live555非常容易扩展对其他格式的支持。目前,Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan)、 MPlayer。
Live555 Streaming Media整体框架
UsageEnvironment模块是对系统环境的抽象,包括抽象类UsageEnvironment和TaskScheduler。UsageEnvironment主要用于消息的输入输出和用户交互功能;TaskScheduler实现事件的异步处理、 事件处理函数的注册等,它通过维护一个异步读取源实现对诸如通信消息到达等事件的处理,通过使用DelayQueue实现对其他注册函数的延时调度。该模 块还包含一个HashTable类,在整个项目中都可以用到它。程序设计者通过自定义该抽象了类UsageEnvironment和 TaskScheduler类的子类,就可以在特定环境(如GUI环境)中运行,不需要进行过多的修改。
BasicUsageEnvironment模块是UsageEnvironment的一个控制台应用的实现。它针对控制台的输入输出和信号响应进行具体实现。
LiveMedia模块是Live555最重要的模块。该模块声明了一个抽象类Medium,其他所有类都派生自该类,下面简要介绍这些类:
Ø RTSPClient:该类实现RTSP请求的发送和响应的解析,同时根据解析的结果创建对应的RTP会话。
Ø MediaSession:用于表示一个RTP会话,一个MediaSession可能包含多个子会话(MediaSubSession),子会话可以是音频子会话、视频子会话等。
Ø RTCPInstance:该类实现RTCP协议的通信。
Ø Source和Sink:这两个概念类似DirectShow中的Filter。Source抽象了数据源,比如通过RTP读取数据。Sink是数据消费 者的抽象,比如把接收到数据存储到文件,该文件就是一个Sink。数据的流动可能经过多个Source和Sink。MediaSink是各种类型的 Sink的基类,MediaSource是各种类型Source的基类,各种类型的流媒体格式和编码的支持即是通过对这两个类的派生实现的。Source和Sink通过RTP子会话(MediaSubSession)联系在一起。
openRTSP客户端流程
1、创建TaskScheduler和BasicUsageEnvironment类;
2、命令行解析,获取流媒体地址和其他选项;
3、创建RTSPClient对象;
4、如果需要,RTSPClient对象发送OPTIONS命令并解析服务端响应,获取可以使用命令集。
5、RTSPClient对象发送DESCRIBE命令,并从获服务端反馈中获取流媒体相关描述SDP字串。
6、创建MediaSession对象,解析SDP字串,创建了相应的子会话对象。在这个过程中还完成了RTP和RTCP通信使用的GroupSock对象的创建,包括协议和端口的选择。
7、根据流媒体不同类型,实例化具体的RTP会话的Source和Sink对象。
9、TaskScheduler开始事件处理循环,通过select监听数据包到达并调用注册函数进行处理。
官方资源:
http://www.live555.com/liveMedia/faq.html#trick-mode
http://www.live555.com/liveMedia/#config-unix
编译方法: ./genMakefiles <os-platform> 如在Linux 下解压Live555后进入目录,然后执行: #./genMakefiles linux-gdb #Make 经过以上步骤生成的live555MediaServer可以用于gdb调试,如果要使源代码中的DEBUG宏有效,还需要修改live/config.linux-gdb文件,在COMPILE_OPTS一行中添加-DDEBUG即可. 运行 进入mediaServer目录启动服务器: [root@localhost mediaServer]# cd mediaServer] [root@localhost mediaServer]# ./live555MediaServer 1,./genMakefiles linux-gdb 其中,后面的gdb是必须的;2,修改live/config.linux-gdb文件,在COMPILE_OPTS一行中添加-DDEBUG,以使源代码中的debug有效;
3,make 编译文件
4,运行gdb live555ProxyServer
5,set args 输入参数,如set args -v rtsp://192.168.xxx.xxx
6,可以先设置断点,如break xx ,然后run;
live555 关于使用ffmpeg扩展文件格式
http://blog.csdn.net/gavinr/article/details/7186843
庖丁解牛-----Live555源码彻底解密(根据MediaServer讲解Rtsp的建立过程)
http://blog.csdn.net/smilestone_322/article/details/18923139
开源项目live555学习心得3
RTSP服务器处理客户端点播的基本流程
http://blog.csdn.net/markman101/article/details/6589836
live555 linux 编译
http://blog.csdn.net/aobai219/article/details/5841951
基于liveMedia的程序,需要通过继承UsageEnvironment抽象类和TaskScheduler抽象类,定义相应的类来处理事 件调度,数据读写以及错误处理。live项目的源代码里有这些类的一个基本实现,这就是“BasicUsageEnvironment”库。 BasicUsageEnvironment主要是针对简单的控制台应用程序,利用select实现事件获取和处理。这个库利用Unix或者 Windows的控制台作为输入输出,处于应用程序原形或者调试的目的,可以用这个库用户可以开发传统的运行与控制台的应用。
通过使用自定义的“UsageEnvironment”和“TaskScheduler”抽象类的子类,这些应用程序就可以在特定的环境中运行, 不需要做过多的修改。需要指出的是在图形环境(GUI toolkit)下,抽象类 TaskScheduler 的子类在实现 doEventLoop()的时候应该与图形环境自己的事件处理框架集成。 一些重要的东东:
Sink -- 就是消费数据的对象,比如把接收到的数据存储到文件, 这个文件就是一个Sink。
Source -- 就是生产数据的对象,比如通过RTP读取数据。
Framer
Parser
Session -- 这主要是因为 rtsp 是有状态的 备注:
从其它Source接收数据的source也叫做"filters"。
Module是一个sink或者一个filter。
数据接收的终点是 Sink类,MediaSink是所有Sink类的基类。
Sink类实现对数据的处理是通过实现纯虚函数continuePlaying(),通常情况下 continuePlaying调用fSource->getNextFrame来为Source设置数据缓冲区,处理数据的回调函数 等,fSource是MediaSink的类型为FramedSource*的类成员。
但如果你有硬编码硬件生成的媒体文件,并且不需要实时播放,那么 Source 就是可以没有的。
aa