·您当前的位置:主页 > 技术教程 > Rtmp技术 >

[RTMP]Red5常见一些问题的指引说明

时间:2012-11-19 22:17blueidea.com
用RED5作为服务器端,Flash作为客户端开发实时在线游戏已经有一段时间了。下面我把一些在开发中的问题及解决说明一下,希望可以给大家带来帮助

用RED5作为服务器端,Flash作为客户端开发实时在线游戏已经有一段时间了。
下面我把一些在开发中的问题及解决说明一下,希望可以给大家带来帮助。
先大致说一下我们开发的逻辑,我们自己定义了一套MESSAGE,MESSAGE分为3类,
1、EVENT,处理事件。EVENT相当于一个注册表,比如说,所有用户列表更新的事件,用户进入时首先会向服务器注册一个事件用于获取所有用 户的列表,当有新用户进入时,服务端会搜索注册了这一事件的用户,并向所有用户INVOKE相对应的方法,相当于广播。
2、REQUEST,处理用户请求。用户请求可能会有Response,可能会有Brocast,根据Request的类型来分别进行逻辑处理。
3、RESPONSE,请求处理完成之后的响应。有Response必然有Request,当用户发起了Request,服务端会统一的 INVOKE客户端的一个方法,由该方法转发服务器处理之后的数据。

下面说一下一些问题
1、关于Scope
room就是一个Scope,链接Room,可以通过客户端发起的Connection的URL进行链接,这种情况下,服务端会判断是否已经存在 这个Room,如果存在,则让用户直接链接,如果不存在,则服务器端会先创建这个Room,再让用户连接。

我们为了实现大厅和房间,在appStart时手动的去创建了这些Room,一开始用了scope.addChildScope()方法,结果在 用户进入房间时一直报NullPointException。查了一下API,发现,addChild只能工作在子域中,修改为 createChildScope(),问题解决。

用户连接到app直后,通过conn.connect(Scope scope)方法进入房间,但是此时发现了一个百思不得其解的问题,虽然没有给程序造成影响,但看着总是不爽 。当用户连接到Room之后,会进行appDisconect的操作,当用户断开客户端时,却只执行了roomDisconect方法,当用户断开链接 时,我需要在appDisconect中作一些关于用户的操作。这个问题一直没解决,如果有同学知道是为啥,请解答,在这先谢过

2、从Flash客户端带参数回传
做过很多的测试,用JSON的形式最好,JSON回传的字符串,在服务端可以通过ObjectMap这个类去解开,很方便。

3、全局变量
一定要谨慎的使用全局变量,最好是通过Room来存储一些全局的数据,比如游戏的进度信息,用户信息。

4、Ghost
经常会出现一些客户端即使断开了还存在的情况,可以用killGhostConnections()这个方法。

5、ShareObject的利弊
当最后一个用户离开时,自己创建的ShareObject会被销毁,当客户端再链接时,会由客户端去创建这个SharedObject,服务端就 无法监控这个SO的状态了,所以推荐用Call及Invoke的方式进行交互。

大概就这些,希望对大家有帮助
Red5: 如何自定义视频流目录(修改默认的streams/目录为其他)
本问介绍了使用bean对自己的项目进行配置,更换默认的视频播放目录和视频录制目录.在0.6版的时候,我们可以直接在red5-web.properties中写入 playbackPath=mypath/来进行目录定义,但是D5发现在0.7以后的版本,这样写已经不起作用了.因此到网上查了一下,找到了这篇文章.不敢独享,发出来供大家参考

RED5中文件名的产生控制
RED5使用scope服务来对其本身的一些功能进行控制.其中一个scope服务是IStreamFilenameGenerator,它用来产生点播VOD流或录制流的的文件名.我们可以通过自定义该scope来达到改变默认视频目录的目的.

热门文章推荐

请稍候...