Red5空项目的理解
在经过三天的苦恼之后,我终于对Red5的工作流程有点了解了。这样一来对要做的项目总算不会太瞎了。出于个人感受,认为下面所讲述的内容对初学者理解Red5以及基于Red5开发有很大的帮助,因此记录下来。
注:以下内容均为个人理解,没有严格的证明过程。若有机会补上。
- 要点一
首先Red5有几个大组件:red5-service、red5-io、red5-server-common、red5-server。这四个组件与其所依赖的第三方jar文件,共同提供了两个基础服务。分别是:
- 基于RTMP的传输服务:基于mina、spring等实现。
- 基于HTTP的Web服务:基于Tomcat实现。
我们使用Red5-eclipse-plugin所创建的项目都是在上述的两种服务之上的。
首先,我们的项目需要指定一个Handler。这个Handler通过spring注入到RTMP服务的代码中,会在适当的实际被回调。例如RTMP握手成功之后将会回调这个Handler的connect方法,表示客户端已经连接上来了。Handler的类型肯定是固定的。
其次,我们的项目是Dynamic Web Project,肯定是基于tomcat的。这也是为什么有WEB-INF等目录。这些与Web项目相关的资源、class文件等,会被打包到Red5中Tomcat所指定的目录,即webapps下,用于被浏览器访问。
- 要点二
对于向我这种用惯SDK、API的开发者,会错误的以为Red5只是提供了RTMP的接口,类时libRTMP。其实不然,Red5其实一直是一个独立的应用程序,仅仅是这个程序开放了回调接口。我们不是向libRTMP那样控制整个处理流程,而是在RTMP的服务流程中插入我们的逻辑代码。这个观点也困惑了我一两天,太瞎了。
- 结论
基于上述两个要点,我们自己创建的Red5空项目,运行起来就已经具备了处理RTMP和Web请求的能力。在我的PC上,当我用http://localhost:5080/Red5Demo访问我的项目时,访问的是Tomcat提供的内容;当我用rtmp://localhost/Red5Demo访问,则请求数据走的是RTMP协议组成的通道。
接下来,如果要定制我们的处理逻辑,只要在我们项目的Handler所在的Java文件中添加代码就可以了。
- 测试
下面是我的的例子,配置如下:
- 通过插件新建项目,名称为Red5Demo。
- 使用IPCamera,内置自己写的RTMP客户端,通过rtmp://Server_PC'sIP/Re5Demo上传数据到Red5,并设置名称为helloworld。
- 使用Adobe的Flash客户端,同样连接rtmp://Server_PC'sIP/Re5Demo,指定播放helloworld音视频流。
这个例子验证了Red5空项目已经支持RTMP传输的观点。
哈哈哈哈,有点白痴,别喷。
Red5空项目的理解的更多相关文章
- ASP.NET Core 1.0 入门——了解一个空项目
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- Heroku空项目 Git本地Push代码错误 以及 Heroku Web启动错误
在Eclipse下建了一个"Blank Heroku App", 然后将自己写好的JS Web练习代码直接复制放到了这个空项目下, 由于Eclipse下的git工具不太会用, 导致 ...
- ASP.NET MVC从空项目开始定制项目
在上一篇net core的文章中已经讲过如何从零开始搭建WebSocket. 今天聊聊ASP.NET的文件结构,如何用自己的目录结构组织项目里的文件. 如果用Visual Studio(VS)向导或d ...
- 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(4)
chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...
- 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(3)
chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...
- 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(2)
chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...
- 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(1)
chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...
- 从“空项目”创建MFC项目遇到的问题error C1189,error MSB8031
在VS2013中创建了一个空项目,创建了MyApp.h, MyApp.cpp(MyApp.h使用了<afxwin.h>) build的时候报错: fatal error C1189: #e ...
- Mave环境搭建SSM集成空项目
---恢复内容开始--- 一.空项目案例 软件: 链接:https://pan.baidu.com/s/18Fk8frnWMBRho43P98C97w 提取码:0rk7 项目:链接:https://p ...
随机推荐
- 在ARM Linux 使用 Valgrind
Linux valgrind 移植到ARM-Linux 一.Cross-Compile/交叉编译 (1)下载及解压Valgrind-3.11 (2)修改confirure 将armv7*)修改为ar ...
- .net闭包的应用
这里体现出闭包的数据共享 , , , , , , , , , }; ; ; values.ToList().ForEach(s => result1 += s); values.ToList() ...
- Spring框架的初步学习
(1) IOC 控制反转 所谓的控制反转就是应用本身不负责依赖对象的创建和维护,依赖对象的创建及维护是由 外部容器负责的(spring是外部容器之一).这样控制权就由应用转移到了外部容器,控制权 的转 ...
- 《sort命令的k选项大讨论》-linux命令五分钟系列之二十七
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- .Net平台下的B/S开发框架
一.前言 本文主要是对.Net平台下的几种B/S开发框架进行比较.只对比前端展现和界面业务逻辑的部分,对于后台的数据层.业务层.持久层等则不作讨论,因为这些部分是完全可以共用的. 主要从如下几个维度 ...
- 反编译Android APK及防止APK程序被反编译
怎么逆向工程对Android Apk 进行反编译 google Android开发是开源的,开发过程中有些时候会遇到一些功能,自己不知道该怎么做,然而别的软件里面已经有了,这个时候可以采用反编译的方式 ...
- python多线程 批量下补丁
一个一个下载 要2个多小时.就直接起了个线程池.效果明显.import urllib2 from urlparse import urlparse uri = 'http://******/patch ...
- Struts, Namespace用法
最近在用SSH框架做一个项目,在使用Struts 的namespace时遇到不少问题,现在就对struts namespace 做一个简单的介绍吧.(本文从项目结构展开叙述) (第1次写博客, 写的不 ...
- 关于BootStrap下图标的显示问题
我现在在做自己的毕业设计,用到了bootstrap的这一套css样式,说句心里话,这一套东西确实很好用,但是一个小问题足足浪费了我将近两个小时. 我的问题是:没有办法使用bootstrap下的图标(很 ...
- uva 1453 - Squares
旋转卡壳算法: 直接在这个上面粘的模板 主要用途:用于求凸包的直径.宽度,两个不相交凸包间的最大距离和最小距离··· 这题就是求凸包的直径 #include <cstdio> #inclu ...