SETUP请求消息处理过程
前面已经提到RTSPClientSession类,用于处理单独的客户会话。其类成员函数handleCmd_SETUP()处理客户端的SETUP请求。调用parseTransportHeader()对SETUP请求的传输头解析,调用子会话(这里具体实现类为 OnDemandServerMediaSubsession)的getStreamParameters()函数获取流媒体发送传输参数。将这些参数组装成响应消息,返回给客户端。
获取发送传输参数的过程:调用子会话(具体实现类MPEG1or2DemuxedServerMediaSubsession)的 createNewStreamSource(...)创建MPEG1or2VideoStreamFramer,选择发送传输参数,并调用子会话的 createNewRTPSink(...)创建MPEG1or2VideoRTPSink。同时将这些信息保存在StreamState类对象中,用于记录流的状态。
客户端发送两个SETUP请求,分别用于建立音频和视频的RTP接收。
PLAY请求消息处理过程
RTSPClientSession类成员函数handleCmd_PLAY()处理客户端的播放请求。首先调用子会话的startStream(),内部调用MediaSink::startPlaying(...),然后是 MultiFramedRTPSink::continuePlaying(),接着调用 MultiFramedRTPSink::buildAndSendPacket(...)。buildAndSendPacke内部先设置RTP包头,内部再调用MultiFramedRTPSink::packFrame()填充编码帧数据。
packFrame内部通过 FramedSource::getNextFrame(), 接着MPEGVideoStreamFramer::doGetNextFrame(),再接着经过 MPEGVideoStreamFramer::continueReadProcessing(), FramedSource::afterGetting(...), MultiFramedRTPSink::afterGettingFrame(...), MultiFramedRTPSink::afterGettingFrame1(...)等一系列繁琐调用,最后到了 MultiFramedRTPSink::sendPacketIfNecessary(), 这里才真正发送RTP数据包。然后是计算下一个数据包发送时间,把MultiFramedRTPSink::sendNext(...)函数句柄传给任务调度器,作为一个延时事件调度。在主循环中,当MultiFramedRTPSink::sendNext()被调度时,又开始调用 MultiFramedRTPSink::buildAndSendPacket(...)开始新的发送数据过程,这样客户端可以源源不断的收到服务器传来的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
分享到:
相关推荐
在IT行业中,Live555是一个著名的开源多媒体流媒体库,它支持多种实时通信协议,如RTSP(Real-Time Streaming Protocol)、RTP(Real-time Transport Protocol)和RTCP(Real-time Transport Control Protocol)。...
这个压缩包中包含的是经过修改的Live555源代码,旨在提供一个更加完善的rtsp客户端和服务端功能,同时增加了部分注释,以帮助开发者更好地理解和使用这个库。 RTSP(Real Time Streaming Protocol)是一种应用层...
确保你阅读并理解了Live555的文档和Makefile的结构,这对于成功编译和部署至关重要。 总结来说,静态编译Live555是为了创建一个独立的、无需依赖外部库的可执行文件。通过修改Makefile并添加`-static`选项,我们...
在这个过程中,"live_net"可能是Live555相关的网络部分源代码或者示例,它可以帮助开发者更好地理解和使用Live555库来处理网络相关的操作,例如建立RTSP连接、发送和接收RTP数据包等。 总的来说,使用Live555在海思...
1. **配置live555**:下载并解压live555源代码,根据Visual Studio 2008的环境配置项目设置,包括包含目录、库目录和链接库。 2. **构建RTSP服务器**:利用live555提供的接口,创建一个RTSP服务器,监听特定端口,...
在live555中,`liveServer`模块实现了RTSP服务器的功能,能够处理客户端的RTSP请求,如DESCRIBE、SETUP、PLAY、TEARDOWN等,以及相关的会话管理和状态维护。 3. **SIP**:会话初始化协议(SIP)是一种用于建立、...
Live555 是一个开源的 RTSP 服务器框架,提供了一个基于 C++ 的实现,用于处理 RTSP 请求和 RTP 传输。Live555 的核心组件包括 RTSP 服务器、RTSP 客户端会话、媒体会话、媒体子会话、RTPSink 和 FramedSource 等。 ...
8. **压缩包内容**:"live555QT"这个文件名可能表示压缩包内包含的是与live555和QT相关的源代码或工程文件,可能包括live555的接口实现、QT界面设计以及与VLC交互的逻辑。 总的来说,这个项目涉及到的流程是从...
1. **RTSP服务器**:实现了完整的RTSP服务器端,能够处理客户端的请求,如DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN等方法,支持多种编码格式的多媒体流。 2. **RTSP客户端**:允许开发者创建RTSP客户端,向服务器...
在IT行业中,实时流传输协议(RTSP)和live555库的使用是构建高效、可靠的视频流服务的关键组成部分。本文将详细讨论如何在海思3516平台上移植和使用live555,以实现实时视频流的转发。 首先,我们需要了解RTSP...
- **RTSPClient类**:负责与RTSP服务器交互,发送DESCRIBE、SETUP、PLAY等命令,并处理服务器的响应。 - **RTPSession类**:管理RTP数据包的接收,包括数据包的解封装和解码。 - **MediaSink类**:接收解码后的数据...
在压缩包文件`live555-12.25`中,可能包含了live555 Media Server的源代码、编译脚本、示例程序和文档等资源。开发者可以参考这些资料,结合ffmpeg,实现对MP4文件的点播服务。实际操作中,开发者需要具备C++编程...
"Live555"是一个开源的多媒体流处理库,它主要用C++编写,用于实现实时音频和视频的网络传输。这个源代码包包含了Live555项目在2005年(假设“16年”指的是从2005年开始算起)的版本,对于学习和理解实时多媒体网络...
在live555中,服务器端的实现涵盖了RTSP的基本命令处理,如DESCRIBE、SETUP、PLAY、TEARDOWN等。 2. **RTSP客户端**:客户端用于与服务器交互,发起RTSP会话,请求媒体数据。客户端代码展示了如何建立连接、发送...
在IT行业中,流媒体传输是将视频和音频数据实时传输到客户端的重要技术,而RTSP...对于初学者来说,理解这些概念和流程是至关重要的,而深入研究live555的源代码和文档可以帮助你更好地掌握RTSP流媒体服务的实现细节。
Live555库为开发者提供了处理RTSP请求和响应的接口,简化了创建RTSP服务器的过程。 在描述中提到,该服务器可以从多个摄像头同时获取数据,这意味着它具有多路复用的能力。这通常通过在服务器端实现并发处理机制来...
在"rtsp_server"这个文件中,可能包含了实现这一过程的相关代码和配置。开发者可以通过阅读和理解这些代码,学习如何将Live555和x264集成,构建自己的实时视频流服务器。 总的来说,"live555 RTSP+x264模拟实时编码...
【live555服务器端代码】是一个针对流媒体服务的开源项目,主要涉及的技术领域包括网络编程、多媒体编码和服务器架构。Live555库是一个强大的工具,它为开发人员提供了一种简单的方式去实现RTSP(Real-Time ...
`live555`负责网络层的通信,`H264`提供了高效的编码,而`ffmpeg`则作为强大的解码和播放工具,三者共同构成了流媒体技术的核心。通过结合`testRTSPClient`和`ffmpeg tutorial`的实践,开发者可以深入理解并实现这些...