0
点赞
收藏
分享

微信扫一扫

C++流媒体开源库Live555详细介绍

目录

1、Live555简介

2、Live555源码目录说明

3、Live555中的关键概念与流程介绍

3.1、liveMedia的运转

3.2、RTSP介绍

3.3、RTSP连接的建立

3.4、DESCRIBE 请求消息处理过程

3.5、SETUP 和PLAY 请求消息处理过程

4、最后


       前段时间大概地学习了一下流媒体开源库Live555,今天给大家详细介绍一下Live555相关的一些内容,以供参考。

1、Live555简介

       Live555是一个为流媒体提供解决方案的跨平台的C++开源项目,它使用了RTP/RTCP、RTSP、SIP开放标准协议,实现了标准流媒体传输。Live555实现了对多种音视频编码格式的音视频数据的流化、接收和处理等支持,包括MPEG,H.265,H.264,H.263 +,DV或JPEG视频和多种音频编码。同时由于良好的设计,Live555非常容易扩展对其他格式的支持。

       使用Live555可以开发客户端拉取远端的音视频流(比如使用VLC播放远端的视频流),也可以开发提供音视频流资源的Live555流媒体服务器。Live555已经被用于多款播放器的流媒体播放功能的实现,如VLC(VideoLan)、MPlayer。当前盛行的网络直播,也大量地使用到了Live555的流媒体技术。

2、Live555源码目录说明

       Live555的目录结构:

3、Live555中的关键概念与流程介绍

3.1、liveMedia的运转

1)Source和Sink
       Source是生产数据的对象,例如从RTP读取数据。MediaSource是所有Source的基类。
Sink是消费数据的对象,例如把接受到的数据存储到文件中。MediaSink是所有Sink的基类。

2)数据流
       Source  ->  Source(filters)  ->  Sink
      从其它Source 接收数据的source 也叫做filters。Module是一个filters或Sink,数据接收的终点是Sink 类,Sink 类实现对数据的处理是通过实现纯虚函数continuePlaying(),通常情况下,continuePlaying 调用getNextFrame 来为Source 设置数据缓冲区,处理数据的回调函数等。不通常的情况下调用processBuffer,从接下来的socket writable或incoming data处理数据。

3)基于liveMedia的应用程序的控制流程

      基于liveMedia的应用程序是事件驱动的,使用如下方式的循环:

while(1)
{
    //查找度网络句柄的列表和延迟队列,发现需要完成的任务;
    //完成任务
}

       对于每个sink,在进入这个循环之前,应用程序通常调用下面的方法来启动需要做的生成任务: SinkObject->startPlaying()。任何时候,一个Module 需要获取数据都通过调用刚好在它之前的那个Module 的getNextFrame() 方法。

3.2、RTSP介绍

       RTSP(实时流媒体协议,Real Time Streaming Protocol),是由Real network 和Netscape共同提出的如何有效地在IP 网络上传输流媒体数据的应用层协议。

       RTSP 提供一种可扩展的框架,使能够提供能控制的,按需传输实时数据,比如音频和视频文件。源数据可以包括现场数据的反馈和存贮的文件。rtsp 对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,rtsp 作用相当于流媒体服务器的远程控制。传输数据可以通过传输层的tcp,udp协议,rtsp 也提供了基于rtp 传输机制的一些有效的方法。

客户端和服务端简单的交互流程如下:

3.3、RTSP连接的建立

       RTSPServer 类用于构建一个RTSP 服务器,该类同时在其内部定义了RTSPClientSession类,用于处理单独的客户会话。相关流程如下:

3.4、DESCRIBE 请求消息处理过程

       RTSP 服务器收到客户端的DESCRIBE 请求后,根据请求URL(rtsp://192.168.2.20/1.mpg),找到对应的流媒体资源, 返回响应消息。live555中的ServerMediaSession 类用来处理会话中描述,它包含多个(音频或视频)的子会话描述(ServerMediaSubsession)。相关处理流程如下:

3.5、SETUP 和PLAY 请求消息处理过程

       RTSPClientSession类, 用于处理单独的客户会话。其类成员函数handleCmd_SETUP()处理客户端的SETUP 请求。调用parseTransportHeader()对SETUP 请求的传输头解析,调用子会话(实现类OnDemandServerMediaSubsession)的getStreamParameters()函数获取流媒体发送传输参数。将这些参数组装成响应消息,返回给客户端。

       获取发送传输参数的过程:

        客户端发送两个SETUP 请求,分别用于建立音频和视频的RTP 接收。PLAY 请求消息处理过程如下:

4、最后

       通过Live555的学习可以搭建简单的RTSP服务器和客户端播放器,理解Live555的基本流程和原理。本文只是简单的介绍,Live555的功能很强大,支持的协议很多,支持的多媒体流构建的视频播放器非常强大,值得相关开发人员去深入学习。

举报

相关推荐

Live555库结构及其核心概念

0 条评论