法媒信息,思科 Talos 团队的云浮研商人口在 LIVE555
流媒体库中发觉了八个严重的代码推行漏洞。该库正被用来包含 VLC 和 MPlayer
在内的多款流行播放器中。

live555 是一个 C++
开荒的流媒体项目,它至关心注重要由多少个用于多媒体流的库组成,其官网地址为
使用开放的规范协议(RTP/RTCP,RTSP,SIP卡塔尔,方便与任何专门的工作的流媒体组件互操作。那几个库可感到Unix-like(满含 Linux 和 Mac OS X),Windows,和 QNX (及此外 POSIX
包容系统)等系统进行编译,它们能够被用来创设流媒体应用。除了库之外,live555
还隐含了多个流媒体应用程序 “LIVE555 Media Server” 和 “LIVE555 Proxy
Server”,它们都以 RTSP 服务器应用程序。

live555源代码下载(VC6工程):

由 Live Networks 开拓和保障的
LIVE555
是三个为流媒体提供解决方案的跨平台的 C++
库,完结了对各个录制格式的流式传输、采用和管理,如
MPEG、H.265、H.264、H.263 +、VP8、DV 和 JPEG 摄像编解码格式,以致MPEG、AAC、AC-3 和 Vorbis 等音频格式。同一时间,由于卓绝的规划, Live555
也特别轻便扩充对其余格式的支撑。

live555 的库能够被用来拍卖 MPEG,H.265,H.264,H.263+,DV 或 JPEG
录像,及多样音频格式。它们仍能非常轻松地拓宽增加,以支撑任何的韵律或摄像编解码格式,并能够被用于营造主旨的
RTSP 或 SIP 顾客端和服务器。

liveMedia
项目(卡塔尔国的源代码饱含多少个为主的库,种种测量检验代码以至Media
Server。三个为主的库分别是: UsageEnvironment&TaskScheduler, groupsock,
liveMedia和BasicUsageEnvironment。UsageEnvironment 和TaskScheduler
类用于事件的调整,完毕异步读取事件的句柄的设置以致错误新闻的输出。其它,还会有一个HashTable
类定义了八个通用的hash
表,别的代码要用到这些表。这么些都以抽象类,在应用程序中基于那一个类来促成协和的子类。groupsock
类是对网络接口的包裹,用于收发数据包。正如名字自己,groupsock
重假如面向多播数据的收发的,它也同不时候帮忙单播数据的收发。liveMedia
库中有一种类类,基类是Medium,那几个类针对分歧的流媒体类型和编码。

康宁职员提议,漏洞(TALOS-2018-0684)存在于
LIVE555 的 HTTP 包拆解解析成效中:

live555
的源代码是开放的,能够方便地供全体音录制开垦研究爱好者学习钻研,可能针对本身实在的项目开展扩张。其源码下载地址为

种种测量检验代码在testProgram 目录下,例如openRTSP
等,这一个代码有扶持精通liveMedia 的选用。
Media Server 是一个纯粹的RTSP 服务器。支持多样格式的媒体文件:

“二个特制的数量包可能会产生基于仓库的缓冲区溢出,进而诱致代码实施,攻击者可通过发送数据包来触发此漏洞。

澳门新葡萄京所有网站 1

* TS 流文件,扩展名ts。

* PS 流文件,扩展名mpg。

* MPEG-4摄像基本流文件,扩张名m4e。

* MP3文件,扩展名mp3。

* WAV 文件(PCM),扩展名wav。

* AM福睿斯 音频文件,扩张名.amr。

* AAC 文件,ADTS 格式,扩展名aac。

安然人士代表,该漏洞已承认存在于 LIVE555 0.92
版本中,不消释出以往最早版本的制品中。

其间 live555-latest.tar.gz 为流行版源码,live.2017.07.18.tar.gz
为前段时间四个规范的版本的源码。除了源码之外,live555
还提供了超级多用于支付测量试验的音录像文件,如 264 目录下的是原始 H.264
码流测量检验文件, 265 目录下的是原始 H.265 码流测量检验文件等。

 

LIVE555 小编答疑称,该漏洞只影响库的 RTSP 服务器端达成,不影响 RTSP
客商端完结,新本子已释出修复补丁。

此地运用 live555 的新星版本源码,live555-latest.tar.gz,使用的操作系统为
64 位的 Ubuntu 16.04 版。下载源码,然后经过如下命令解压缩:

用live555开发应用程序

 

基于liveMedia 的次序,需求通过世襲UsageEnvironment 抽象类和TaskScheduler
抽象类,定义相应的类来处监护人件调治,数据读写以至错误管理。live
项指标源代码里有这几个类的多少个主干落到实处,那便是“BasicUsageEnvironment”库。BasicUsageEnvironment
主借使照准轻松的调控台应用程序,利用select
实现事件获得和管理。那一个库利用Unix 可能Windows
的调节台作为输入输出,处于应用程序原形或然调节和测量试验的指标,能够用这几个库顾客能够付出守旧的运营与调节台的施用。

由此接收自定义的“UsageEnvironment”和“TaskScheduler”抽象类的子类,这么些应用程序就能够在一定的意况中运维,
不须要做过多的改变。供给提出的是在图片意况(GUI
toolkit)下,抽象类TaskScheduler
的子类在促成doEventLoop(卡塔尔的时候理应与图片碰着协和的事件管理框架集成。

澳门新葡萄京所有网站 2

hanpfei0306@ThundeRobot:/media/data/osprojects$ tar xf live555-latest.tar.gzhanpfei0306@ThundeRobot:/media/data/osprojects$ cd live

基本概念

先来熟谙在liveMedia 库中Source,Sink 甚至Filter 等概念。Sink
正是费用数据的靶子,例如把吸取到的多寡存款和储蓄到文件,
这些文件就是一个Sink。Source 便是生产总的数量的靶子,譬喻通过RTP
读取数据。数据流经过多少个’source’和’sink’s,下边是一个演示:

‘source1’ -> ‘source2’ (a filter) -> ‘source3’ (a filter) ->
‘sink’

从其余Source 选择数据的source 也叫做”filters”。Module 是二个sink
或者二个filter。数据接受的终端是Sink 类,MediaSink 是具备Sink
类的基类。Sink
类完毕对数据的管理是通过贯彻纯虚函数continuePlaying(State of Qatar,常常意况下continuePlaying
调用fSource->getNextFrame 来为Source
设置数据缓冲区,管理多少的回调函数等,fSource是MediaSink
的连串为FramedSource*的类成员。

来自:thehackernews 
编译:开源中华夏族民共和国

能够透过如下命令编写翻译 live555:

大旨决定流程

基于liveMedia 的应用程序的决定流程如下:
应用程序是事件驱动的,使用如下方式的轮回

[cpp] view
plain copy

 

  1. while (1) {  
  2. 通过寻觅读网络句柄的列表和延迟队列(delay queue)来发掘要求完毕的任务  
  3. 完了这些职分  
  4. }  

对此每一个sink,在步向那些轮回在此以前,应用程序平时调用下边的主意来运维需求做的更动职分:
someSinkObject->startPlaying(State of Qatar。任曾几何时候,贰个Module
须求获取数据都因而调用正好在它前边的十三分Module
的FramedSource::getNextFrame(卡塔尔方法。这是透过纯虚函数FramedSource::doGetNextFrame(State of Qatar实现的,每种Source module 都有对应的达成。
Each ‘source’ module’s implementation of “doGetNextFrame()” works by
arranging for an ‘after getting’ function to be called (from an event
handler) when new data becomes available for the caller.
Note that the flow of data from ‘sources’ to ‘sinks’ happens within each
application, and doesn’t necessarily correspond to the sending or
receiving of network packets. For example, a server application (such as
“testMP3Streamer”) that sends RTP packets will do so using one or
more “RTPSink” modules. These “RTPSink” modules receive data from other,
“*Source” modules (e.g., to read data from a file), and, as a side
effect, transmit RTP packets.

 

live555代码解读之一:RTSP 连接的成立进度

RTSPServer 类用于塑造三个RTSP
服务器,该类同时在其内部定义了贰个RTSPClientSession类,用于拍卖单独的客商会话。
第一创制RTSP 服务器( 具体落实类是DynamicRTSPServer卡塔尔(قطر‎ , 在创立进度中,
先创建Socket(ourSocket卡塔尔 在TCP 的554 端口进行监听,
然后把连接管理函数句柄(RTSPServer::incomingConnectionHandlerState of Qatar和socket
句柄传给任务调治器(taskScheduler卡塔尔。
任务调节器把socket 句柄归入后边select 调用中用到的socket
句柄集(fReadSet卡塔尔(قطر‎中,同不经常间将socket 句柄和incomingConnectionHandler
句柄关联起来。接着,主程序起头踏入职分调解器的主循环(doEventLoop),在主循环中调用系统函数select
拥塞,等待网络连接。
当RTSP 顾客端输入(rtsp://192.168.1.109/1.mpg卡塔尔国连接服务器时,select
再次回到对应的scoket,进而依照前边保存的照顾关系, 可找到呼应管理函数句柄,
这里就是前边提到的incomingConnectionHandler
了。在incomingConnectionHandler
中开创了RTSPClientSession,开头对那一个客商端的对话进行管理。

live555代码解读之二:DESCLacrosseIBE 伏乞音信管理进度

RTSP 服务器收到客商端的DESC哈弗IBE
诉求后,依据乞求U奥德赛L(rtsp://192.168.1.109/1.mpgState of Qatar,找到相应的流媒体财富,
重返响应信息。live555中的ServerMediaSession
类用来拍卖会话中呈报,它包括多少个(音频或录像)的子会话描述(ServerMediaSubsession卡塔尔国。
上节大家谈起RTSP 服务器收到客户端的连天要求,建构了RTSPClientSession
类,管理单独的客商会话。在构建RTSPClientSession
的进程中,将新创设的socket 句柄(clientSocket)和RTSP
诉求管理函数句柄RTSPClientSession::incomingRequestHandler
传给职分调解器,由任务调治器对双方举办一对一关联。当顾客端发出RTSP
央求后,服务器主循环中的select调用重临,依据socket
句柄找到相应的incomingRequestHandler,起先消息管理。先进行音讯的深入分析,若是开采号召是DESC揽胜IBE
则跻身handleCmd_DESCLANDIBE 函数。依照客商端央浼UENVISIONL 的后缀(比如是1.mpg),
调用成员函数DynamicRTSPServer::lookupServerMediaSession查找对应的流媒新闻ServerMediaSession。即便ServerMediaSession
不设有,然而地面存在1.mpg
文件,则开创多少个新的ServerMediaSession。在创建ServerMediaSession
进度中,
基于文件后缀.mpg,创立媒体MPEG-1or2的解复用器(MPEG1or2FileServer德姆uxState of Qatar。再由MPEG1or2FileServerDemux
创造二个子会话描述MPEG1or2德姆uxedServerMediaSubsession。最终由ServerMediaSession
实现建构响应音信中的SDP 音信(SDP
组装进度见上面包车型客车陈述),然后将响应新闻发给客户端,实现贰回消息交互作用。

SDP 音信组装进程

ServerMediaSession 担当发生对话公共描述音讯,
子会话描述由MPEG1or2德姆uxedServerMediaSubsession
暴发。MPEG1or2DemuxedServerMediaSubsession在其父类成员函数On德姆andServerMediaSubsession::sdpLines(卡塔尔(قطر‎中生成会话描述音信。在sdpLines(State of Qatar实现里面, 创立一个伪造(dummy卡塔尔国 的FramedSource(
具体落到实处类为MPEG1or2奥迪(Audi卡塔尔国oStreamFramer
和MPEG1or2VideoStreamFramer卡塔尔(قطر‎和RTPSink(具体达成类为MPEG1or2奥迪(AudiState of QataroRTPSink
和MPEG1or2VideoRTPSink ) ,
最后调用setSDPLinesFromRTPSink(…卡塔尔成员函数生成子会话描述。

以上关联到的类以至延续关系:

Medium <- ServerMediaSession

Medium <- ServerMediaSubsession <-
OnDemandServerMediaSubsession
<-MPEG1or2DemuxedServerMediaSubsession

Medium <- MediaSource <- FramedSouse <- FramedFileSource
<- ByteStreamFileSource

Medium <- MediaSource <- FramedSouse <-
MPEG1or2DemuxedElementaryStream

Medium <- MPEG1or2FileServerDemux

Medium <- MPEG1or2Demux

Medium <- MediaSource <- FramedSouse <-
MPEG1or2DemuxedElementaryStream

Medium <- MediaSource <- FramedSouse <- FramedFilter <-
MPEGVideoStreamFramer <-MPEG1or2VideoStreamFramer

Medium <- MediaSink <- RTPSink <- MultiFramedRTPSink <-
VideoRTPSink <-MPEG1or2VideoRTPSink

live555代码解读之三:SETUP 和PLAY 央求消息管理进度
日前早就提到RTSPClientSession 类,
用于拍卖单独的客商会话。其类成员函数handleCmd_SETUP(卡塔尔处理顾客端的SETUP
供给。调用parseTransportHeader(卡塔尔国对SETUP
央浼的传输头解析,调用子会话(这里具体贯彻类为OnDemandServerMediaSubsession卡塔尔(قطر‎的getStreamParameters(卡塔尔国函数获取流媒体发送传输参数。将这个参数组装成响应音信,重返给客商端。

获得发送传输参数的进度:

调用子会话( 具体实现类MPEG1or2DemuxedServerMediaSubsession)的createNewStreamSource(…卡塔尔国成立MPEG1or2VideoStreamFramer,选拔发送传输参数,并调用子会话的createNewRTPSink(…卡塔尔国创设MPEG1or2VideoRTPSink。相同的时间将那么些新闻保存在StreamState
类对象中,用于记录流的状态。
澳门新葡萄京所有网站,客商端发送多个SETUP 诉求,分别用于组建音频和录像的RTP 采用。

PLAY 央求新闻管理进度:

RTSPClientSession
类成员函数handleCmd_PLAY(State of Qatar管理客商端的播音央浼。首先调用子会话的startStream(卡塔尔国,
内部调用MediaSink::startPlaying(…卡塔尔(قطر‎ ,
然后是MultiFramedRTPSink::continuePlaying(卡塔尔(قطر‎ ,
接着调用MultiFramedRTPSink::buildAndSendPacket(…卡塔尔国。buildAndSendPacke
内部先安装RTP 桂林,内
部再调用MultiFramedRTPSink::packFrame(State of Qatar填充编码帧数据。
packFrame 内部通过FramedSource::getNextFrame(卡塔尔(قطر‎,
接着MPEGVideoStreamFramer::doGetNextFrame(卡塔尔国 ,
再接着经过MPEGVideoStreamFramer::continueReadProcessing(卡塔尔国 ,
FramedSource::afterGetting(…卡塔尔国,MultiFramedRTPSink::afterGettingFrame(…卡塔尔国,MultiFramedRTPSink::afterGettingFrame1(…卡塔尔(قطر‎ 等一雨后春笋繁缛调用,最终到了MultiFramedRTPSink::sendPacketIfNecessary(卡塔尔国,
这里才真正发送RTP
数据包。然后是测算下一个数额包发送时间,把MultiFramedRTPSink::sendNext(…State of Qatar函数句柄传给职责调治器,
作为一个延时事件调节。在主循环中, 当MultiFramedRTPSink::sendNext()被调节时,
又开端调用MultiFramedRTPSink::buildAndSendPacket(…State of Qatar开端新的发送数据进度,那样客户端能够接连不断的收到服务器传来的RTP
包了。
出殡RTP 数据包的区间总括方法:

Update the time at which the next packet should be sent, based on the
duration of the frame that we just packed into it.

关联到有些类有:

MPEGVideoStreamFramer: A filter that breaks up an MPEG video
elementary stream into headers

and frames

MPEG1or2VideoStreamFramer: A filter that breaks up an MPEG 1 or 2
video elementary stream

into frames for: Video_Sequence_Header, GOP_Header,
Picture_Header

MPEG1or2DemuxedElementaryStream: A MPEG 1 or 2 Elementary Stream,
demultiplexed from

a Program Stream

MPEG1or2Demux: Demultiplexer for a MPEG 1 or 2 Program Stream

ByteStreamFileSource: A file source that is a plain byte stream
(rather than frames)

MPEGProgramStreamParser: Class for parsing MPEG program stream

StreamParser: Abstract class for parsing a byte stream

StreamState: A class that represents the state of an ongoing stream

rtsp 简介(ZT)
Real Time Streaming Protocol 只怕RTSP(实时流媒体公约),是由Real
network 和Netscape协同建议的什么有效地在IP
网络上传输流媒体数据的应用层协议。RTSP
提供一种可扩大的框架,使能够提供能决定的,按需传输实时数据,举例音频和摄像文件。源数据能够满含现场数码的举报和存贮的公文。rtsp
对流媒体提供了诸如暂停,快进等决定,而它自身并不传输数据,rtsp
效能也就是流媒体服务器的长途调节。传输数据能够透过传输层的tcp,udp商讨,rtsp
也提供了基于rtp 传输体制的局地立竿见影的艺术。

RTSP 新闻格式:

RTSP
的消息有两大类,一是伸手新闻(request卡塔尔(قطر‎,一是回答新闻(response卡塔尔国,二种音信的格式差异.

央求音讯:
方法URI RTSP 版本CR LF
消息头CR LF CR LF
消息体CR LF
内部措施包蕴OPTION 回应中负有的一声令下,U奥迪Q7I
是接收方的地址,比如:rtsp://192.168.20.136。
RTSP 版本日常都以RTSP/1.0.每行前面包车型大巴C奥迪Q5 LF
表示回车换行,须要选拔端有照望的剖判,最后七个音讯头须求有三个CGL450 LF

回应新闻:
RTSP 版本状态码解释C安德拉 LF
消息头CR LF CR LF
消息体CR LF
当中RTSP
版本经常都是RTSP/1.0,状态码是三个数值,200代表成功,解释是与状态码对应的文件解释。

简短的rtsp 人机联作进度:
C 表示rtsp 客户端,S 表示rtsp 服务端

[html] view
plain copy

 

  1. 1.C->S:OPTION request //询问S 有何样方法可用  
  2. 1.S->C:OPTION response //S 回应音讯中满含提供的具有可用方法  
  3. 2.C->S:DESCHighlanderIBE request //供给获得S 提供的媒体初阶化描述消息  
  4. 2.S->C:DESCTiggoIBE response //S 回应媒体起始化描述音讯,首倘诺sdp  
  5. 3.C->S:SETUP request //设置会话的品质,以至传输方式,提醒S 创建会  
  6. 话  
  7. 3.S->C:SETUP response //S 建设布局会话,重回会话标记符,以致会话相关音信  
  8. 4.C->S:PLAY request //C 央求播放  
  9. 4.S->C:PLAY response //S 回应该伏乞的新闻  
  10. S->C:发送流媒体数据  
  11. 5.C->S:TEA讴歌RDXDOWN request //C 央求关闭会话  
  12. 5.S->C:TEACR-VDOWN response //S 回应该央浼  

上述的长河是专门的工作的、友好的rtsp
流程,但实在的急需中并不一定规行矩步来。当中第3和4步是少不了的!第一步,只要服务器顾客端约定好,有什么措施可用,则option
乞求能够毫无。第二步,假诺大家有此外门路获取媒体发轫化描述音信(比方http
央求等等),则大家也无需通过rtsp 中的describe
需要来成功。第五步,能够借助系统要求的安插性来调整是还是不是要求。

rtsp 中常用艺术:

1.OPTION

指标是赢得服务器提供的可用方法:
OPTIONS rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
CSeq: 1 //每一个音信都逐步号来标志,第二个包常常是option 诉求新闻
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
服务器的答问音讯包涵提供的有个别格局,举个例子:
RTSP/1.0 200 OK
Server: UServer 0.9.7_rc1
Cseq: 1 //每种回应信息的cseq 数值和央求音信的cseq 相对应
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE,
SCALE,GET_PARAMETE奥迪Q5 //服务器提供的可用的秘诀

2.DESCRIBE

C 向S 发起DESCEscortIBE 央求,为了获得会话描述消息(SDP卡塔尔:
DESCRIBE rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
CSeq: 2
token:
Accept: application/sdp
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
服务器回应一些对此会话的陈说新闻(sdpState of Qatar:
RTSP/1.0 200 OK
Server: UServer 0.9.7_rc1
Cseq: 2
x-prev-url: rtsp://192.168.20.136:5000
x-next-url: rtsp://192.168.20.136:5000
x-Accept-Retransmit: our-retransmit
x-Accept-Dynamic-Rate: 1
Cache-Control: must-revalidate
Last-Modified: Fri, 10 Nov 2006 12:34:38 GMT
Date: Fri, 10 Nov 2006 12:34:38 GMT
Expires: Fri, 10 Nov 2006 12:34:38 GMT
Content-Base: rtsp://192.168.20.136:5000/xxx666/
Content-Length: 344
Content-Type: application/sdp
v=0 //以下都以sdp 消息
o=OnewaveUServerNG 1451516402 1025358037 IN IP4 192.168.20.136
s=/xxx666
u=http:///
e=admin@
c=IN IP4 0.0.0.0
t=0 0
a=isma-compliance:1,1.0,1
a=range:npt=0-
m=video 0 RTP/AVP 96 //m
代表媒体描述,上边是对会话中央广播台频通道的媒体陈述
a=rtpmap:96 MP4V-ES/90000
a=fmtp:96
profile-level-id=245;config=000001B0F5000001B509000001000000012000C888B0E0E0FA62D
089028307
a=control:trackID=0//trackID=0代表摄像流用的是通道0

3.SETUP

顾客端提醒服务器创立会话,并规定传输形式:
SETUP rtsp://192.168.20.136:5000/xxx666/trackID=0 RTSP/1.0
CSeq: 3
Transport: RTP/AVP/TCP;unicast;interleaved=0-1
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
//uri 中饱含trackID=0,表示对该通道进行安装。Transport
参数设置了传输格局,包的布局。接下来的多少镇江部第一个字节地方正是interleaved,它的值是各个通道都不可同日而道的,trackID=0的interleaved
值有三个0或1,0表示rtp 包,1象征rtcp 包,选取端根据interleaved
的值来差距是哪个种类数据包。
服务器回应音讯:
RTSP/1.0 200 OK
Server: UServer 0.9.7_rc1
Cseq: 3
Session: 6310936469860791894 //服务器回应的对话标记符
Cache-Control: no-cache
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=6B8B4567

4.PLAY

顾客端发送播放央浼:
PLAY rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
CSeq: 4
Session: 6310936469860791894
Range: npt=0.000- //设置播放时间的界定
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
服务器回应消息:
RTSP/1.0 200 OK
Server: UServer 0.9.7_rc1
Cseq: 4
Session: 6310936469860791894
Range: npt=0.000000-
RTP-Info: url=trackID=0;seq=17040;rtptime=1467265309
//seq 和rtptime 都以rtp 包中的音讯

5.TEARDOWN

客商端发起关闭诉求:
TEARDOWN rtsp://192.168.20.136:5000/xxx666 RTSP/1.0
CSeq: 5
Session: 6310936469860791894
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)
服务器回应:
RTSP/1.0 200 OK
Server: UServer 0.9.7_rc1
Cseq: 5
Session: 6310936469860791894
Connection: Close
以上措施都以相互进度中极度常用的,其余还大概有局地注重的点子如get/set_parameter,pause,redirect
等等

 

hanpfei0306@ThundeRobot:/media/data/osprojects/live$ ./genMakefiles linux-64bithanpfei0306@ThundeRobot:/media/data/osprojects/live$ makecd liveMedia ; makemake[1]: Entering directory '/media/data/osprojects/live/liveMedia'c++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -m64 -fPIC -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 Media.cppc++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -m64 -fPIC -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 MediaSource.cppc++ -c -Iinclude -I../UsageEnvironment/include -I../groupsock/include -m64 -fPIC -I. -O2 -DSOCKLEN_T=socklen_t -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -DBSD=1 FramedSource.cpp. . . . . .

附录

 

 

其中 genMakefiles 脚本用于爆发 Makefile
文件,它需求一个操作系统版本的版本号作为参数,该脚本文件的剧情如下:

sdp 的格式

 

[html] view
plain copy

 

  1. v=<version>  
  2. o=<username> <session id> <version> <network type> <address type> <address>  
  3. s=<session name>  
  4. i=<session description>  
  5. u=<URI>  
  6. e=<email address>  
  7. p=<phone number>  
  8. c=<network type> <address type> <connection address>  
  9. b=<modifier>:<bandwidth-value>  
  10. t=<start time> <stop time>  
  11. r=<repeat interval> <active duration> <list of offsets from start-time>  
  12. z=<adjustment time> <offset> <adjustment time> <offset> ….  
  13. k=<method>  
  14. k=<method>:<encryption key>  
  15. a=<attribute>  
  16. a=<attribute>:<value>  
  17. m=<media> <port> <transport> <fmt list>  
  18. v = (左券版本)  
  19. o = (全体者/成立者和对话标志符)  
  20. s = (会话名称)  
  21. i = * (会话音讯)  
  22. u = * (URI 描述)  
  23. e = * (Email 地址)  
  24. p = * (电话号码)  
  25. c = * (连接消息)  
  26. b = * (带宽音讯)  
  27. z = * (时间区域调治)  
  28. k = * (加密密钥)  
  29. a = * (0 个或多个会话属性行)  
  30. 光阴描述:  
  31. t = (会话活动时间)  
  32. r = * (0或多次重复次数)  
  33. 传播媒介描述:  
  34. m = (媒体名称和传导地址)  
  35. i = * (媒体题目)  
  36. c = * (连接音信— 假使含有在会话层则该字段可选)  
  37. b = * (带宽音信)  
  38. k = * (加密密钥)  
  39. a = * (0 个或五个媒体属性行)  

参照小说:rfc2326(rtsp);rfc2327(sdp)

#!/bin/shusage() { echo "Usage: $0 <os-platform>" exit 1}if [ $# -ne 1 ]then usage $*fiplatform=$1subdirs="liveMedia groupsock UsageEnvironment BasicUsageEnvironment testProgs mediaServer proxyServer" for subdir in $subdirsdo /bin/rm -f $subdir/Makefile cat $subdir/Makefile.head config.$platform $subdir/Makefile.tail > $subdir/Makefile chmod a-w $subdir/Makefiledone/bin/rm -f Makefilecat Makefile.head config.$1 Makefile.tail > Makefilechmod a-w Makefile

RTSP 点播音信流程实例

(客户端:VLC, RTSP 服务器:LIVE555 Media Server)

1)C(Client)-> M(Media Server)

[html] view
plain copy

 

  1. OPTIONS rtsp://192.168.1.109/1.mpg RTSP/1.0  
  2. CSeq: 1  
  3. user-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)  
  4. 1)M -> C  
  5. RTSP/1.0 200 OK  
  6. CSeq: 1  
  7. Date: wed, Feb 20 2008 07:13:24 GMT  
  8. Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE  

2)C -> M

[html] view
plain copy

 

  1. DESCRIBE rtsp://192.168.1.109/1.mpg RTSP/1.0  
  2. CSeq: 2  
  3. Accept: application/sdp  
  4. User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)  

2)M -> C

[html] view
plain copy

 

  1. RTSP/1.0 200 OK  
  2. CSeq: 2  
  3. Date: wed, Feb 20 2008 07:13:25 GMT  
  4. Content-Base: rtsp://192.168.1.109/1.mpg/  
  5. Content-type: application/sdp  
  6. Content-length: 447  
  7. v=0  
  8. o =- 2284269756 1 IN IP4 192.168.1.109  
  9. s=MPEG-1 or 2 program Stream, streamed by the LIVE555 Media Server  
  10. i=1.mpg  
  11. t=0 0  
  12. a=tool:LIVE555 Streaming Media v2008.02.08  
  13. a=type:broadcast  
  14. a=control:*  
  15. a=range:npt=0-66.181  
  16. a=x-qt-text-nam:MPEG-1 or Program Stream, streamed by the LIVE555 Media Server  
  17. a=x-qt-text-inf:1.mpg  
  18. m=video 0 RTP/AVP 32  
  19. c=IN IP4 0.0.0.0  
  20. a=control:track1  
  21. m=audio 0 RTP/AVP 14  
  22. c=IN IP4 0.0.0.0  
  23. a=control:track2  

3)C -> M

[html] view
plain copy

 

  1. SETUP rtsp://192.168.1.109/1.mpg/track1 RTSP/1.0  
  2. CSeq: 3  
  3. Transport: RTP/AVP; unicast;client_port=1112-1113  
  4. User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)  

3)M -> C

[html] view
plain copy

 

  1. RTSP/1.0 200 OK  
  2. CSeq: 3  
  3. Date: wed, Feb 20 2008 07:13:25 GMT  
  4. Transport:  
  5. RTP/AVP;unicast;destination=192.168.1.222;source=192.168.1.109;client_port=1112-1113;server  
  6. _port=6970-6971  
  7. Session: 3  

4)C -> M

[html] view
plain copy

 

  1. SETUP rtsp://192.168.1.109/1.mpg/track2 RTSP/1.0  
  2. CSeq: 4  
  3. Transport: RTP/AVP; unicast;client_port=1114-1115  
  4. Session: 3  
  5. User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)  

4)M -> C

[html] view
plain copy

 

  1. RTSP/1.0 200 OK  
  2. CSeq: 4  
  3. Date: wed, Feb 20 2008 07:13:25 GMT  
  4. Transport:  
  5. RTP/AVP;unicast;destination=192.168.1.222;source=192.168.1.109;client_port=1114-1115;server  
  6. _port=6972-6973  
  7. Session: 3  

5)C -> M

[html] view
plain copy

 

  1. PLAY rtsp://192.168.1.109/1.mpg/ RTSP/1.0  
  2. CSeq: 5  
  3. Session: 3  
  4. Range: npt=0.000-  
  5. User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20)  

5)M -> C

[html] view
plain copy

 

  1. RTSP/1.0 200 OK  
  2. CSeq: 5  
  3. Range: npt=0.000-  
  4. Session: 3  
  5. RTP-Info:  
  6. url=rtsp://192.168.1.109/1.mpg/track1;seq=9200;rtptime=214793785,url=rtsp://192.168.1.109/1.  
  7. mpg/track2;seq=12770;rtptime=31721  
  8. (伊始传输流媒体…卡塔尔国  

其一本子便是把各类目录下的三个文件预先定义的 Makefile
内容文件合併起来,发生最终的 Makefile
文件。各样文件夹上面都预约义了阳台相关的安顿文件,如,在项目根目录下:

hanpfei0306@ThundeRobot:/media/data/osprojects/live$ ls | grep configconfig.aixconfig.alphaconfig.armeb-uclibcconfig.armlinuxconfig.avr32-linuxconfig.bfin-linux-uclibcconfig.bfin-uclinuxconfig.bsplinuxconfig.cris-axis-linux-gnuconfig.cygwinconfig.cygwin-for-vlcconfig.freebsdconfig.iphoneosconfig.iphone-simulatorconfig.irixconfig.linuxconfig.linux-64bitconfig.linux-gdbconfig.linux-with-shared-librariesconfig.macosxconfig.macosx-32bitconfig.macosx-before-version-10.4config.mingwconfig.openbsdconfig.qnx4config.solaris-32bitconfig.solaris-64bitconfig.sunosconfig.uClinux

提供给 genMakefiles
脚本的操作系统版本的版本号参数,须求与这么些安顿文件中,要编译的对象操作系统对应的不行配置文件的后缀名相称。编译完结后,由逐条库发生
.a 文件,种种库及各种应用程序的靶子文件都放在它们本人的目录中。

传播媒介服务应用程序的可施行文件坐落于 live/mediaServer/live555MediaServer

live555 中的流媒体服务器应用程序 live555MediaServer
可以丰盛实惠地用来提供流媒体服务。在寄存流媒体文件的目录下进行
live555MediaServer

$ ./live555MediaServer

下一场就足以经过如下格式的 U路虎极光L 播放流媒体文件了:

rtsp://10.240.248.20:8554/<filename>

其中 <filename> 为执行 live555MediaServer
命令的目录下的流媒体文件,IP 地址为主机的 IP 地址。

live555MediaServer 程序运维起来之后,可以行使播放器软件,如 VLC Media
Player 和 ffplay 播放流媒体内容。如:

$ ffplay rtsp://10.240.248.20:8000/raw_h264_stream.264

要是只是想玩一下 live555MediaServer
的话,还足以一贯下载它的编写翻译好的二进制文件,地址。

继而来看 live555 的源码构造。首先为 live555 成立一个 Eclipse 的 C++
Project,方法为选拔菜单栏的 File -> New -> C++
Project,弹出如下对话框:

澳门新葡萄京所有网站 3

Project Name: 一栏输入工程名字,这里用 live555;反选
Use default location,然后在 Location: 一栏中输入 live555
源码的路子;在 Project type: 下选择 Makefile project ->
Empty Project;在 Toolchains: 下选择 Linux GCC

然后点击右下角的 Finish 开关,创造工程。live555 源码构造如下:

澳门新葡萄京所有网站 4

live555
源码首要由多少个部分构成:UsageEnvironment,BasicUsageEnvironment,groupsock,liveMedia,mediaServer,proxyServer,testProgs,Windows奥迪oInputDevice。

依次部分的代码量如下表所示:

子模块 文件个数 代码量
UsageEnvironment 3 162
BasicUsageEnvironment 6 1187
groupsock 8 2672
liveMedia 168 49552
mediaServer 2 332
proxyServer 1 251
WindowsAudioInputDevice 4 1037
testProgs 32 6510
总共 224 61703

逐个部分的回顾表达如下。

UsageEnvironment 中的 “UsageEnvironment” 和 “TaskScheduler”
类用于调整延迟的事件,为异步的读事件分配管理程序,甚至出口错误/警示新闻。UsageEnvironment
中的 “HashTable”
类还为范型哈希表定义了接口,由别的的代码应用。UsageEnvironment
中的都是抽象类;它们必得在得以达成中被接续。那么些子类能够利用它运转的遭逢的一定属性,比方它的
GUI 和/或脚本情况。

BasicUsageEnvironment 库则定义了 UsageEnvironment
中的类的两个具体完毕,用于轻易的极限应用程序。读取事件和延期操作使用五个
select() 循环管理。

那么些库中的类封装了互联网接口和 sockets。特别是中间的 “Groupsock”
类封装了一个 socket,用于发送组播数据报。

其一库是 live555 的着力所在。在这之中定义了多少个类档期的顺序种类,以 “Medium”
为顶层基类,用于形形色色的流媒体类型和编解码。

mediaServer 目录下的是 “LIVE555 Media Server”,它是三个完好无缺的 RTSP
服务器应用程序。它能够把二种媒体文件转为流,如前方见到的,那几个文件必需放在当前工作目录。这个文件满含:

  • MPEG TS 文件(文件后缀名字为 “.ts”)
  • Matroska 或 WebM 文件(文件后缀名称为 “.mkv” 或 “.webm”)
  • Ogg 文件(文件后缀名称为 “.ogg”,”ogv” 或 “.opus”)
  • MPEG-1 或 2 程序流文件(文件后缀名称为 “.mpg”)
  • MPEG-4 Video Elementary Stream 文件(文件后缀名叫 “.m4e”)
  • H.264 Video Elementary Stream 文件(文件后缀名称为”.264″)
  • H.265 Video Elementary Stream 文件(文件后缀名称为”.265″)
  • VOB 录像+音频文件(文件后缀名字为”.vob”)
  • DV 摄像文件(文件后缀名称叫”.dv”)
  • MPEG-1 或 2 (包蕴 layer III – 例如 ‘DVD’卡塔尔(قطر‎音频文件(文件后缀名字为”.VCD”)
  • WAV 音频文件(文件后缀名字为”.wav”)
  • AMENVISION 音频文件(文件后缀名称为”.amr”)
  • AC-3 音频文件(文件后缀名字为”.ac3″)
  • AAC 音频文件(文件后缀名字为”.aac”)

proxyServer 目录下的是 “LIVE555 Proxy Server”,它是二个单播 RTSP
服务器,它为三个或八个 “后端” 单播或多播 RTSP/RTP 流扮演 “ 代理”的剧中人物。

那是 “liveMedia” 库的 “奥迪oInputDevice” 抽象类的叁个落实。它能够被
Windows 应用程序用于从输入设备读取 PCM 音频采集样板。

那几个目录达成了一些粗略的次第,使用 “BasicUsageEnvironment”
来演示怎么着利用那一个库开拓应用程序。个中除了富含用于测验库的测验应用之外,还饱含”openRTSP” – 命令行的 RTSP 顾客端,”playSIP” – 命令行的 SIP
会话记录器,”vobStreamer” – 网络 mp4 播放器等工具。

Done。

live555 源码解析:简单介绍live555 源码解析:底工设备live555
源码深入分析:MediaSeverWireshark 抓包分析 RTSP/RTP/RTCP 基本工作过程live555
源码深入分析:RTSPServerlive555 源码解析: DESC君越IBE 的拍卖live555 源码深入分析:
SETUP 的管理live555 源码解析: PLAY 的拍卖live555 源码剖析:RTSPServer
组件布局live555 源码分析:ServerMediaSessionlive555 源码深入分析:子会话 SDP
行生成live555 源码解析:子会话 SETUPlive555 源码分析:播放运转