开源流媒体服务器-Live555
2015-02-12 14:23:58 阿炯

LIVE555 Streaming Media是一个为流媒体提供跨平台的解决方案,实现了对标准流媒体传输解决方案,可跨平台使用C++开发并在LGPL协议授权,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。

Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG、H.263+、DV、JPEG视频和多种音频编码。同时由于良好的设计,Live555非常容易扩展对其他格式的支持。目前Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan)、MPlayer。


A complete RTSP server application.


LIVE555 Streaming Media is a set of open source (LGPL) C++ libraries for multimedia streaming.[1] The libraries support open standards such as RTP/RTCP and RTSP for streaming, and can also manage video formats such as H.264, MPEG, VP8, and DV, and audio formats such as MPEG, AMR, AC-3 and Vorbis. It is designed in such a way that it can be easily extended to support more formats.Its RTSP/RTP/RTCP client implementation is used by VLC media player and MPlayer.

由 Live Networks 开发和维护的 LIVE555 是一个为流媒体提供解决方案的跨平台的 C++ 库,实现了对各种视频格式的流式传输、接收和处理,如 MPEG、H.265、H.264、H.263 +、VP8、DV 和 JPEG 视频编解码格式,以及 MPEG、AAC、AC-3 和 Vorbis 等音频格式。


架构

UsageEnvironment模块是对系统环境的抽象,包括抽象类UsageEnvironment和TaskScheduler。UsageEnvironment主要用于消息的输入输出和用户交互功能;TaskScheduler实现事件的异步处理、事件处理函数的注册等,它通过维护一个异步读取源实现对诸如通信消息到达等事件的处理,通过使用DelayQueue实现对其他注册函数的延时调度。该模块还包含一个HashTable类,在整个项目中都可以用到它。程序设计者通过自定义该抽象了类UsageEnvironment和TaskScheduler类的子类,就可以在特定环境(如GUI环境)中运行,不需要进行过多的修改。

BasicUsageEnvironment模块是UsageEnvironment的一个控制台应用的实现。它针对控制台的输入输出和信号响应进行具体实现。

GroupSock模块用于实现数据包的发送和接收。GroupSock主要被设计用以支持多播,但它也完全支持单播通信。

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)联系在一起。
 

流媒体库被曝出高危漏洞

思科 Talos 团队的安全研究人员于2018年10月23日在 LIVE555 流媒体库中发现了一个严重的代码执行漏洞。该库正被用于包括 VLC 和 MPlayer 在内的多款流行播放器中。

安全人员指出,漏洞(TALOS-2018-0684)存在于 LIVE555 的 HTTP 包解析功能中:
一个特制的数据包可能会导致基于堆栈的缓冲区溢出,从而导致代码执行,攻击者可通过发送数据包来触发此漏洞。

安全人员表示,该漏洞已确认存在于 LIVE555 0.92 版本中,不排除出现在早期版本的产品中。LIVE555 作者回应称,该漏洞只影响库的 RTSP 服务器端实现,不影响 RTSP 客户端实现,新版本已释出修复补丁。


最新版本:


官方主页:http://www.live555.com/