以前我们做了分析过程,这一次,我们都参与了类做梳子,两个可以一起关注一下一起合并,整个方案的实施是有帮助。

BaseClientApplication APP基类,一切APP都基于这个类

StreamsManager _streamsManager;
能够对该APP所属的流链接进行管理

map<uint64_t, BaseAppProtocolHandler *> _protocolsHandlers;
这个APP所支持的协议













BaseProtocol 协议基类,一切协议都基于这个类,比如BaseHTTPProtocol和BaseRTMPProtocol

BaseClientApplication *_pApplication;
该协议所属的APP

BaseProtocol *_pFarProtocol;
远端协议

BaseProtocol *_pNearProtocol;
//表示到服务器的远近[outside world --->ssl--->http--->rtmp--->server]

//离server近期的是rtmp协议,最远的为ssl









BaseRTMPProtocol   RTMP协议运算基类

IOBuffer _outputBuffer;
协议的交互buffer

BaseRTMPAppProtocolHandler *_pProtocolHandler;
所属的协议事务类

BaseStream *_streams[MAX_STREAMS_COUNT]; 这边是一个连接对象同意请求256次流?

LinkedListNode<BaseOutNetRTMPStream *> *_pSignaledRTMPOutNetStream;
输出流集合









BaseAppProtocolHandler APP处理协议事务基类,--->BaseRTMPAppProtocolHandler--->RTMPAppProtocolHandler

BaseClientApplication *_pApplication;
能够找到所属的APP





对于主要的协议交互,BaseRTMPAppProtocolHandler已经足够使用。继承于它的RTMPAppProtocolHandler仅仅只是添加一些特定的扩展应用。同理,BaseRTSPAppProtocolHandler,对于比較简单的协议比方ssl和http。大部分功能都在BaseAppProtocolHandler,仅仅须要重载实现部分接口就能够了。而对于调用者来说。构造一个RTMPAppProtocolHandler和HTTPAppProtocolHandler就可以支持两种协议的事务处理









BaseRTMPAppProtocolHandler  继承于BaseAppProtocolHandler

map<uint32_t, BaseRTMPProtocol *> _connections;
协议基础类的支持?









StreamsManager 流链接管理

BaseClientApplication *_pApplication;
所属APP









BaseStream 流处理基类

BaseProtocol *_pProtocol;
所属协议

StreamsManager *_pStreamsManager;
反向查询流管理









BaseInStream --->BaseStream 流输入类

map<uint32_t, BaseOutStream *> _linkedStreams;
相应的流输出集合





BaseOutStream --->BaseStream 流输出类

BaseInStream *_pInStream;
流的输入对象





InNetRTMPStream --->BaseInNetStream --->BaseInStream
RTMP 流公布时创建的,用于管理流输入,在这个类中做流分发处理

IOBuffer _videoCodecInit;
相应的视频流缓冲

IOBuffer _audioCodecInit;
相应的音频流缓冲





















IOHandler 处理IO交互,网络相关,TCPAcceptor,TCPCarrier,TCPConnector...

BaseProtocol *_pProtocol;
所属的交互协议。RTMP/HTTP/RTSP...

IOHandlerType _type;
标识本IO的处理类型,參见IOHandlerType,ACCEPT/CONNECT/TCP/UDP









TCPAcceptor TCP监听器

BaseClientApplication *_pApplication;









IOHandlerManager IO交互管理,程序入口为这个类

static map<uint32_t, IOHandler *> _activeIOHandlers;
有效IO

static map<uint32_t, IOHandler *> _deadIOHandlers;
无效IO









ProtocolManager Protocol协议交互管理





ClientApplicationManager APP管理









ProtocolFactoryManager 协议厂,这个计划包括支持协议,外观似无关的配置文件。有着25协议

版权声明:本文博主原创文章。博客,未经同意不得转载。

crtmpserver通常使用基本类演示的更多相关文章

  1. Scala编程--基本类型和操作

    如果你熟悉Java,你会很开心地发现Java基本类型和操作符在Scala里有同样的意思.然而即使你是一位资深Java开发者,这里也仍然有一些有趣的差别使得本章值得一读.因为本章提到的一些Scala的方 ...

  2. Java基础(35):装箱与拆箱---Java 中基本类型和包装类之间的转换(Wrapper类)

    基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦): 在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更加轻松便利了. 那什么是装箱 ...

  3. [转]javascript中基本类型和引用类型的区别分析

    基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段:引用类型值指由多个值构成的对象.当我们把变量赋值给一个变量时,解析器首先要做的就是确 ...

  4. 利用crtmpserver搭建rtmp服务器

    Google + 实践:最终直播成功. 记录一下. 这样.兴许就能够对代码进行改造,利用开源码实现:Android平台下.搭建rtmpserver.浏览器端利用flash播放视频. 代码架构为:ffm ...

  5. javascript中基本类型和引用类型的区别分析

    大多数人系统学习过的程序设计语言,在这些语言的学习过程中最早学到的几个要点之一就是值类型和引用类型的区别.下面我们来看一下在 JavaScript 中基本数据类型(Primitive Types)和引 ...

  6. Visaul Studio 常用快捷键的动画演示

    从本篇文章开始,我将会陆续介绍提高 VS 开发效率的文章,欢迎大家补充~ 在进行代码开发的时候,我们往往会频繁的使用键盘.鼠标进行协作,但是切换使用两种工具会影响到我们的开发速度,如果所有的操作都可以 ...

  7. 免费的精品: Productivity Power Tools 动画演示

    Productivity Power Tools 是微软官方推出的 Visual Studio 扩展,被用以提高开发人员生产率.它的出现一定程度上弥补和完善了 Visual Studio 自身的不足, ...

  8. Html5 快速排序演示

    快速排序(Quicksort)是对冒泡排序的一种改进.快速排序由C. A. R. Hoare在1962年提出. 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另 ...

  9. 【Java心得总结一】Java基本类型和包装类型解析

    说到数据类型这个问题是一个基本的不能再基本的问题,我们当初编程入门第一课一般就是讲数据类型,而今天我想记录的是一个在Java中容易忽略的问题,即基本类型和包装类型. 一.基本类型出现的原因 我们都知道 ...

随机推荐

  1. Codeforces 220B - Little Elephant and Array 离线树状数组

    This problem can be solve in simpler O(NsqrtN) solution, but I will describe O(NlogN) one. We will s ...

  2. c# 操作PPT

    前段时间要做一个把指定图片放到新建的ppt的东西,在网上找了点资料看了一下,发现用C#做好像是最简单的一个,一下是在网上找的一段代码,直接贴进去就能够执行,可是在执行之前一定要加入dll支持:  项目 ...

  3. 重学《C#高级编程》(序)

    小生码农一枚,以前只是看别人写博客,从来没有想过要自己写博文,突然之间“脑抽”想自己也写点什么,遂在博客园开通这个博客. 简单介绍下自己吧,本人90后,父母对我没有大的想法,只是希望我平安成长,多学习 ...

  4. DataGrid( 数据表格) 组件[3]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  5. C#如何以管理员身份运行程序(转)

    在使用winform程序获取调用cmd命令提示符时,如果是win7以上的操作系统,会需要必须以管理员身份运行才会执行成功,否则无效果或提示错误. 比如在通过winform程序执行cmd命令时,某些情况 ...

  6. The type or namespace name 'Script' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)

    应该说是 .net4 的bug,没有所谓的 System.Web.Extensions.dll 库文件,需要将项目的 Target Framework修改为 3.5版本,才能加载System.Web. ...

  7. hdu 5188

    it's a  dp  difficult problem 试想如果我们遇见这样一道题,: 有n道题目,每道题有一个得分v和用时t: 我们要得够w分:用时最少  怎么做?? 这是一个裸奔的01背包 如 ...

  8. 《Hadoop权威》学习笔记五:MapReduce应用程序

    一.API的配置---Configuration类 API的配置:Hadoop提供了专门的API对资源进行配置,Configuration类的实例(在org.apache.hadoop.conf包)包 ...

  9. [Mugeda HTML5技术教程之9]使用元件

    元件是一个可以在舞台上实例化和再利用的预先生成的独立动画.一个元件有它自己的时间轴(层,单位等),可以独立显示的动画.元件提高了动画的重用性和灵活性,是个强大的存在.元件可用于创建复杂的动画效果. 所 ...

  10. Redis VS Memcached 转载

    引子: 在大数据时代,总希望存在一个Key-value存储机制,像HashMap一样在内存中处理大量(千万数量级)的key-value对,以便提高数据查找.修改速度. 所以,我们会想到,Memcach ...