在经过三天的苦恼之后,我终于对Red5的工作流程有点了解了。这样一来对要做的项目总算不会太瞎了。出于个人感受,认为下面所讲述的内容对初学者理解Red5以及基于Red5开发有很大的帮助,因此记录下来。

注:以下内容均为个人理解,没有严格的证明过程。若有机会补上。

  • 要点一

首先Red5有几个大组件:red5-service、red5-io、red5-server-common、red5-server。这四个组件与其所依赖的第三方jar文件,共同提供了两个基础服务。分别是:

  1. 基于RTMP的传输服务:基于mina、spring等实现。
  2. 基于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文件中添加代码就可以了。

  • 测试

下面是我的的例子,配置如下:

  1. 通过插件新建项目,名称为Red5Demo。
  2. 使用IPCamera,内置自己写的RTMP客户端,通过rtmp://Server_PC'sIP/Re5Demo上传数据到Red5,并设置名称为helloworld。
  3. 使用Adobe的Flash客户端,同样连接rtmp://Server_PC'sIP/Re5Demo,指定播放helloworld音视频流。

这个例子验证了Red5空项目已经支持RTMP传输的观点。

哈哈哈哈,有点白痴,别喷。

Red5空项目的理解的更多相关文章

  1. ASP.NET Core 1.0 入门——了解一个空项目

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  2. Heroku空项目 Git本地Push代码错误 以及 Heroku Web启动错误

    在Eclipse下建了一个"Blank Heroku App", 然后将自己写好的JS Web练习代码直接复制放到了这个空项目下, 由于Eclipse下的git工具不太会用, 导致 ...

  3. ASP.NET MVC从空项目开始定制项目

    在上一篇net core的文章中已经讲过如何从零开始搭建WebSocket. 今天聊聊ASP.NET的文件结构,如何用自己的目录结构组织项目里的文件. 如果用Visual Studio(VS)向导或d ...

  4. 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(4)

    chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...

  5. 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(3)

    chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...

  6. 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(2)

    chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...

  7. 对一个前端使用AngularJS后端使用ASP.NET Web API项目的理解(1)

    chsakell分享了一个前端使用AngularJS,后端使用ASP.NET Web API的项目. 源码: https://github.com/chsakell/spa-webapi-angula ...

  8. 从“空项目”创建MFC项目遇到的问题error C1189,error MSB8031

    在VS2013中创建了一个空项目,创建了MyApp.h, MyApp.cpp(MyApp.h使用了<afxwin.h>) build的时候报错: fatal error C1189: #e ...

  9. Mave环境搭建SSM集成空项目

    ---恢复内容开始--- 一.空项目案例 软件: 链接:https://pan.baidu.com/s/18Fk8frnWMBRho43P98C97w 提取码:0rk7 项目:链接:https://p ...

随机推荐

  1. C++类的成员初始化列表的相关问题

    在以下四中情况下,要想让程序顺利编译,必须使用成员初始化列表(member initialization list): 1,初始化一个引用成员(reference member): 2,初始化一个常量 ...

  2. 操作系统之进程篇(4)--经典进程间通信(IPC)问题

    1. 哲学家进餐问题: 问题描述: 五个哲学家在一个圆桌上进餐,每人的面前放了一盘意大利面,两个盘子之间有一个叉子,但是由于盘子里面的面条十分光滑,需要两个叉子才能进行就餐行为.餐桌的布局如下图所示: ...

  3. 【转】PHP网站常见安全漏洞,及相应防范措施总结

    ---恢复内容开始--- 目前,基于PHP的网站开发已经成为目前网站开发的主流,本文笔者重点从PHP网站攻击与安全防范方面进行探究,旨在减少网站漏洞,希望对大家有所帮助! 一.常见PHP网站安全漏洞 ...

  4. void void*

    void类型及void指针 1.概述 许多初学者对C/C 语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并 详述void及void指 ...

  5. Razor与ASPX语法比较

  6. 设置Android程序的默认安装位置

    修改 AndroidManifest.xml 文件: <manifest xmlns:android="http://schemas.android.com/apk/res/andro ...

  7. php缓存相关

    在php运行期间,php引擎要对php源码进行处理,(词法分析,语法分析等)然后生成opcode. 然后再运行.在这个阶段可以把opcode缓存起来,当下次需要运行这段程序的时候,就避免了再次 进行词 ...

  8. Python全栈开发之MySQL(二)------navicate和python操作MySQL

    一:Navicate的安装 1.什么是navicate? Navicat是一套快速.可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设.它的设计符合数据库管理员.开发人员及中小 ...

  9. 转:如何制作一个定制的 PHP 基础 Docker 镜像(一)

    原文来自于:http://open.daocloud.io/ru-he-zhi-zuo-yi-ge-ding-zhi-de-php-ji-chu-docker-jing-xiang/ 目标:准备一个定 ...

  10. Wordpress 网站搭建及性能监控方法详解!

    前言 说到 Wordpress,大家往往想到的是博客,其实,如今的 WordPress 已经成为全球使用量最多的开源 CMS 系统.并且,如果你有一定的技术基础稍加改动,就可以搭建出新闻网站.企业网站 ...