ve555代码解读之二:DESCRIBE请求消息处理过程
RTSP服务器收到客户端的DESCRIBE请求后,根据请求URL(rtsp://192.168.1.109/1.mpg),找到对应的流媒体资源,返回响应消息。live555中的ServerMediaSession类用来处理会话中描述,它包含多个(音频或视频)的子会话描述 (ServerMediaSubsession)。
上节我们谈到RTSP服务器收到客户端的连接请求,建立了RTSPClientSession类,处理单独的客户会话。在建立 RTSPClientSession的过程中,将新建立的socket句柄(clientSocket)和RTSP请求处理函数句柄 RTSPClientSession::incomingRequestHandler传给任务调度器,由任务调度器对两者进行一对一关联。当客户端发出 RTSP请求后,服务器主循环中的select调用返回,根据socket句柄找到对应的incomingRequestHandler,开始消息处理。先进行消息的解析,如果发现请求是DESCRIBE则进入handleCmd_DESCRIBE函数。根据客户端请求URL的后缀(例如是1.mpg), 调用成员函数DynamicRTSPServer::lookupServerMediaSession查找对应的流媒体信息 ServerMediaSession。如果ServerMediaSession不存在,但是本地存在1.mpg文件,则创建一个新的 ServerMediaSession。在创建ServerMediaSession过程中,根据文件后缀.mpg,创建媒体MPEG-1or2的解复用器(MPEG1or2FileServerDemux)。再由MPEG1or2FileServerDemux创建一个子会话描述 MPEG1or2DemuxedServerMediaSubsession。最后由ServerMediaSession完成组装响应消息中的SDP信息(SDP组装过程见下面的描述),然后将响应消息发给客户端,完成一次消息交互。
SDP消息组装过程:
ServerMediaSession负责产生会话公共描述信息,子会话描述由 MPEG1or2DemuxedServerMediaSubsession产生。 MPEG1or2DemuxedServerMediaSubsession在其父类成员函数 OnDemandServerMediaSubsession::sdpLines()中生成会话描述信息。在sdpLines()实现里面,创建一个虚构(dummy)的FramedSource(具体实现类为MPEG1or2AudioStreamFramer和 MPEG1or2VideoStreamFramer)和RTPSink(具体实现类为MPEG1or2AudioRTPSink和 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
分享到:
相关推荐
1. **live555 Media Server**:Live555是一个开源的C++库,专门用于实时多媒体流处理,支持RTSP(Real-Time Streaming Protocol)、RTP(Real-time Transport Protocol)和RTCP(Real-time Transport Control ...
- **数据传输**:Live555服务器根据RTSP协商结果,将编码后的音视频数据封装为RTP数据包并发送给客户端。 **系统流程说明**: - 如图1所示,系统流程分为数据采集、编码处理、封装与传输三个主要步骤。 #### 三、...
4. **处理RTSP请求**:当客户端发送RTSP请求如`DESCRIBE`、`SETUP`、`PLAY`时,你需要正确地解析和响应这些请求。例如,`DESCRIBE`请求用于获取媒体描述,`SETUP`请求用于设置传输参数,`PLAY`请求启动媒体播放。 5...
【标题】"live555 的openRTSP 改写" 在实时流媒体领域,live555是一个广泛使用的开源库,它提供了多种协议(如RTSP、RTCP、RTP)的支持,使得开发者能够创建复杂的多媒体应用。openRTSP是live555库中的一个命令行...
《深入理解Live555:构建RTSP客户端与服务器》 在数字媒体传输领域,Live555是一个不可或缺的开源库,它为开发者提供了构建实时流媒体应用的强大工具。本文将详细探讨Live555的核心功能,以及如何利用其客户端Demo...
5. **跨平台**:Live 555源代码可以在多种操作系统上编译和运行,包括Linux、Windows、Mac OS X等,具有良好的可移植性。 6. **API接口**:为开发者提供了简单易用的API接口,便于将流媒体功能集成到自己的应用程序...
而`live555`文件可能包含了库的源代码和示例程序,通过阅读和分析这些代码,你可以更深入地理解如何在实际应用中使用LIVE555来拉取和处理H264流。 总之,利用LIVE555库拉取H264数据流并按帧读取,涉及到网络协议...
在live555中,服务器端的实现涵盖了RTSP的基本命令处理,如DESCRIBE、SETUP、PLAY、TEARDOWN等。 2. **RTSP客户端**:客户端用于与服务器交互,发起RTSP会话,请求媒体数据。客户端代码展示了如何建立连接、发送...
Live555库为开发者提供了处理RTSP请求和响应的接口,简化了创建RTSP服务器的过程。 在描述中提到,该服务器可以从多个摄像头同时获取数据,这意味着它具有多路复用的能力。这通常通过在服务器端实现并发处理机制来...
3. **媒体格式支持**:Live555能够处理多种媒体格式,如MPEG、H.264、AAC等,这得益于其对MIME类型的广泛支持。 4. **跨平台兼容性**:Live555库在多种操作系统上都能运行,包括Linux、Windows、Mac OS X等,这极大...
1. **配置live555**:下载并解压live555源代码,根据Visual Studio 2008的环境配置项目设置,包括包含目录、库目录和链接库。 2. **构建RTSP服务器**:利用live555提供的接口,创建一个RTSP服务器,监听特定端口,...
这个模块是基于Live555库的`testRtspClient.cpp`示例代码改造而成,被封装为DLL动态链接库,并且添加了视频帧回调接口,使得开发者可以更方便地处理接收到的视频数据。 1. **RTSP协议**: RTSP是一种应用层协议,它...
4. **处理RTSP请求**: 实现RTSP回调函数,以响应客户端的`DESCRIBE`、`SETUP`、`PLAY`等命令。例如,`onDescribeRequest`函数会返回SDP(Session Description Protocol)信息,描述媒体流的特性;`onSetupRequest`则...
1. **live555库介绍**:可能包含live555库的安装指南、API文档和示例代码,帮助读者理解和如何使用这个库来构建自己的流媒体应用。 2. **RTSP协议详解**:深入讲解RTSP的命令和响应机制,如DESCRIBE、SETUP、PLAY、...
在live555中,我们可以创建一个`BasicTaskScheduler`来管理任务,然后实例化`Live555Server`对象,处理RTSP会话。 在处理SETUP请求时,我们需要指定媒体类型(这里是H264),以及传输机制,如UDP或多路复用TCP。这...
标题 "live555接收H264数据用ffmpeg解码播放" 描述了一种技术实践,即如何利用开源库live555处理实时传输协议(RTSP)流中的H264视频数据,并通过ffmpeg进行解码播放。在这个过程中,开发者通常会遇到网络通信、媒体...
《深入理解Live555与RTSP推流技术》 在多媒体通信领域,实时传输协议(Real-Time Transport Protocol,简称RTSP)是一种控制媒体流的协议,常用于视频监控、在线直播等应用场景。而Live555是开源的C++库,支持多种...
在这个文档中,我们将深入分析Live555源代码,了解RTSP服务器如何建立连接以及处理DESCRIBE请求。 1. RTSP连接的建立过程: - 首先,通过RTSPServer类创建RTSP服务器。RTSPServer内部包含RTSPClientSession类,...