`
weiyuhu
  • 浏览: 231041 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

live555代码解读之三:SETUP和PLAY请求消息处理过程

UP 
阅读更多
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
分享到:
评论

相关推荐

    live555 centos 64位修改编译报错

    直接从官网下载的live555源码在centos 64位下编译报错,此为修改后版本。

    Live555代码MinGW静态编译

    live555 原来执行“./genMakefile mingw”产生的makefile脱离msys就报缺少libgcc的库,先修改makefile让产生的exe文件可以直接双击运行。

    live555源代码

    视频开发实例,介绍怎么发布点播 直播流 结构清晰,是一个很好的开源代码。

    live555官方源码包

    live555源码包~

    live555-latest源代码以及live555.exe

    有live555的源代码以及可执行程序 代码目录live555_source\live\live\BasicUsageEnvironment live555_source\live\live\groupsock live555_source\live\live\liveMedia ...

    live555最新源代码(官网)

    到官网上下载最新的源代码位置,截图指引(http://www.live555.com/liveMedia/)普通大众不可能获得比官网上还新的吧

    VS2017编译Live555源代码

    VS2017编译Live555源码,此项目为搭建完成后的工程,只需加载即可运行,加载步骤: 1.解压项目,找到live555Win工程文件夹。 2.运行live555Win文件夹下的live555Win.sln。 即可加载工程。 压缩包中live555Win文件夹...

    live555服务器端代码

    live555源代码 可以直接编译直接调试的 解决了你从官方网站上面下载之后不能调试的难题 编译之后可以直接作为服务器端

    Windows下利用live555实现H264H265实时流RTSP发送

    Windows下利用live555实现H264H265实时流RTSP...环境从vs2015改为vs2010,增加了H265的处理,Live555使用了最新版。同时修改unsigned OutPacketBuffer::maxSize = 60000也改在main里面,未对Live555源码做任何变动。

    live555源代码最新版

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

    live555断线重连,多路接入.rar_himself1qr_live555 多路_live555 断开_live555断线重

    live555断线重连,以及实现基本过程,详细的需要各位进一步填充了

    基于live555库的mjpeg流传输c++代码(多播方式)

    基于live555库的mjpeg流传输c++代码(多播方式) 博客地址:https://blog.csdn.net/Di_Wong/article/details/107284635 【使用说明】 1、在http://www.live555.com/ 官网下载live555库 2、将该文件下内容替换到live...

    live 555 源代码

    live555 16年的代码,源代码,直接输入genMakefile 就可以生成对应的makefile

    live555, live555源代码的镜像.zip

    live555, live555源代码的镜像 生成指令./genMakefiles linuxmake -j4将"linux"替换为平台。比如 avr32-linux 。CYGWIN 。freebsd 。iphoneos 。linux 。linux-64

    live555源代码概述与源代码

    live555源代码概述与源代码Media Server是一个纯粹的RTSP服务器。支持多种格式的媒体文件: * TS流文件,扩展名ts。 * PS流文件,扩展名mpg。 * MPEG-4视频基本流文件,扩展名m4e。 * MP3文件,扩展名mp3。 ...

    经过修改的live555代码

    提供了更加完善的rtsp客户端与服务端,并做了部分注释,使用起来更加方便,对于一些有争议的部分进行了补充。

    live555 海思 监控

    使用live555 硬件平台:arm9 海思HISI3511 操作系统:linux 功能:嵌入式 视频监控 rtsp

    C++ Live555 类库实现的网络直播系统

    C++ Live555 类库实现的网络直播系统。 Live555主要有四个类库: libUsageEnvironment.lib;libliveMedia.lib;libgroupsock.lib;libBasicUsageEnvironment.lib 将这四个类库以及相关的头文件导入VC++2010之后,...

    live555代码分析.pub

    简单分析了live555中的RTSP相关代码实现流程,重要的函数说明。 主要包括: 1,RTSPserver创建过程分析 2,DESCRIBE命令处理流程 3,SETUP命令处理流程。

    rtp+rtcp+rtsp live555源代码

    最好的研究流媒体的源代码. 真的不错, live555

Global site tag (gtag.js) - Google Analytics