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

live555代码解读之二:DESCRIBE请求消息处理过程

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

相关推荐

    live555代码分析.pub

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

    mysql 查询表结构的2种 sql 语句.7z

    要查询 MySQL 数据库中表的结构,可以使用 DESCRIBE 语句或 SHOW COLUMNS 语句。这些语句可以向用户提供有关表的详细信息, 如列名、 数据类型、键信息等。 1. DESCRIBE 语句: 使用 DESCRIBE 语句可以获取表的...

    mysql 查询表结构的2种 sql 语句.docx

    要查询 MySQL 数据库中表的结构,可以使用 DESCRIBE 语句或 SHOW COLUMNS 语句。这些语句可以向用户提供有关表的详细信息, 如列名、 数据类型、键信息等。 1. DESCRIBE 语句: 使用 DESCRIBE 语句可以获取表的...

    pandas.Series(len_sequences).describe() 的示例理解代码.ipynb

    pandas.Series(len_sequences).describe() 的示例理解代码,帮助理解四元数。

    PB describe Evaluate LookUpDisplay用法

    PB describe Evaluate LookUpDisplay用法,仅供参考!

    eslint-plugin-no-only-tests:禁止使用describe.only()和it.only()

    基本原理当开发人员修复测试,他们可以通过使用过滤方法测试简化这个过程only在it与describe 。 但是,当项目在CI上运行时,此类过滤器不应位于存储库中。 因此,我们将此规则添加到以only检查测试文件中是否存在。 ...

    Android代码-RetrofitUtils

    RxJava Retrofit封装,包含对相同格式请求数据、相同格式返回数据处理,显示Material Design加载dialog,文件上传下载进度展示、全局异常捕捉。 Preview 演示中upload.png为上传图片源文件。 Describe 实现功能: 1...

    testRclient.cpp_describe流程.eddx

    live555 流媒体开源技术

    describe:实验性的Python BDD工具

    from describe import Mock, stub, expect, verify_mock # Primary features from describe import flags # Argument matching 用法 快速开始 描述的核心是期望对象。 在以前的版本中,它被称为Value对象: from ...

    mysql desc(DESCRIBE)命令实例讲解

    mysql desc命令用于查看表结构,是DESCRIBE命令的简写形式。 mysql desc命令语法: desc tablename 该命令会显示表哪些信息呢?具体包括: 字段名称(Field) 字段类型(Type) 字段是否为null 字段是否为主键(key)...

    data-describe:数据⎰描述

    data-describe一直在寻求提升探索性数据分析的标准。这里只是一些实现的方法: 降维方法 敏感数据(PII)编辑 文本预处理/主题建模 大数据支持 安装 可以使用pip安装data-describe: pip install data-describe ...

    describe_it:鼻子插件,用于describeit语法

    Describe-it是一个鼻子插件,它使您可以编写单元测试,而该单元测试更像是组件如何工作的可执行示例,而不仅仅是被测试。 另一个好处是能够描述组件在某些上下文中的行为,其中一个上下文可以通过使用嵌套在先前...

    微软数据库考试70-768: Exam Ref 70-768 Developing SQL Data Models

    Describe the products that make up the Microsoft BI platform. Module 2: Creating Multidimensional Databases This module describes how to create multidimensional databases using SQL Server Analysis ...

    基于R 语言对 Titanic 进行预测,kaggle的比赛,有pdf 和代码,英文版

    Description: Describe the methods (or tools) you used to analyze the features and why they can be helpful. Also, give a brief introduction of Naïve Bayes models (in your own words). Our team used R ...

    DESCRIBE.png libstreaming RTCP describe交互细节,经典。

    DESCRIBE.png libstreaming RTCP describe交互细节,经典。

    iOS单元测试框架KiwiforiOS.zip

    示例代码: describe(@"Team", ^{ context(@"when newly created", ^{ it(@"should have a name", ^{ id team = [Team team]; [[team.name should] equal:@"Black Hawks"]; }); it(@"should have 11 ...

    git-describe-semver:始终从 `$(git-describe --long)` 获取有效的 SemVer

    git-describe-semver :herb: :memo: :package: 始终从$(git-describe --long)获取有效的 SemVer! 概念验证,目前需要全局安装 CoffeeScript ( /usr/bin/env coffee )。 将以编译后的 js 形式发布到 npm。 快速...

    mobalmobal_iOS:头发头发iOS:red_apple:

    拉取请求 模板 ### Related Issue resolve: # ### What does this PR do? - ### Why are we doing this? - ### Screenshots 合并选项 Hackathon:1个或更多代码审查 之后:2个或更多代码审查 建筑学 MVVM 代码风格 ...

    describe-number:在Emacs中任意描述任意数量的数字

    对于字符串,每个字符都以相同的方式处理。 通过支持任意数量的数字。 使用describe-number-at-point上点/区域或describe-number输入值手动。 最好将describe-number-at-point绑定到某个键: ( global-set-key ...

    curl-rtsp:基于libcurl的rtsp客户端

    请求媒体服务器DESCRIBE特定的媒体流。 响应中的会话描述被写入SDP文件。 通过指定传输协议请求媒体服务器SETUP特定的媒体流。 请求媒体服务器PLAY选择的媒体流。 请求当前会话的TEARDOWN 。 示例输出 $./curl_...

Global site tag (gtag.js) - Google Analytics