-
第一章
PhMeetings
——
基
于
OpenMeetings
的实验性商业版本
OpenMeetings
2010-09-29
16:42:53
阅读
279
评论
0
字号:大中小
订阅
作者:老猫
PhMeetings
是基于开源
WEB
< br>视频会议系统
OpenMeetings
开发的一个实验
性商业版本,
原始蓝本来自。
老猫花了好几个月的时间,费了九
牛二虎之力至今天终于完成了一个目前还算过得去的版本,沾沾自喜
中
< br>……
由于资料的缺乏以及对
O
penLaszlo
编程的陌生,其中艰辛不足为外人道。
今日
发一声感慨:
如果你想
折磨一个程序员,那就让他去干开源软件
的二次开发!
好了,言归正传,
先推销一下
PhMeetings
的演示地址:
参考国内流行的一些
C/S
架构下的网络视频会议系统,老猫的
PhMeetings
在
OpenMeetings
基础上增
加了一些适合独立进行商业运营的概念和功能,同时也删减了一些不符合国内网络环境或者形同鸡肋 的功
能。
删除的功能有:
SIP
接入网关(
IP
phone
在国内基本用不上)
预约会议功能(这个在商业运营商很难掌控)
屏幕共享功能(除非部署在局域网环境,否则会把人急死)
取消了其它类型房间的录制功能,只保留<
/p>
interview
类型房间内的录制功能
新增的概念或功能:
房间目录树概念:用于对房间采用树状目录管理
新增用户类型:房主。使得房间的租用概念得以商业化推广。
房间计费管理及租用到期提醒功能
新增房间管理后台功能:房主可以管理房间超级主持人、
LOG
O
、背景、黑名单、白名单、链接
及广告等。
< br>
房间收藏和房间搜索功能:方便在
众多的房间中找到你想要去的。
房间锁功能:可对房间设置进入密码。
踢出房间功能:超级管理员或者房主有权在
房间里将捣乱的用户踢出系统。
黑名单功能:将用户
ID
或者
< br>IP
加入房间黑名单,该用户将被该房间拒之门外。
白名单功能:列入房间白名单的用户在房间
设置密码锁时可以不必输入密码验证。
<
/p>
游客直接通过链接进入房间功能:房间租用者可以对游客开展产品推介或其它客服服务。<
/p>
房间内显示背景、
LOGO
、广告及链接功能
房间欢迎语滚动显示
增加了全屏显示功能(可惜全屏时聊天的输入无法使用)
增加了视频配置里的视频帧数调节
改进的部分有:
对界面进行美化和改进
修正了移植数据库到
ORACLE
时的
一些
BUG
改进了房间的整体布局
对中文化不彻底的地方进行了完善
改进了视频的显示和布局方式
改进了摄像头采集区域的一些
优化了音频和视频参数配置
增加用户默认头像的性别区分
将用户信息从
BUG
firstname
、
lastname
等西方习惯改为昵称
欢迎有兴趣的朋友注册
PhMeetings
参与体验。或者以
游客身份直接进入
OpenMeetings
技术群专属房
p>
间
参与讨论。
第二章
OpenMeetings<
/p>
二次开发实例(一)
游客直接进入房间
OpenMeetings
2010-09-29
10:42:15
阅读
474
评论
1
字号:大中小
订阅
作者:老猫
决定写点东西,技术细节
上的东西在二次开发过程中可以慢慢摸索和体会,如果要把这些改造过程中
的细节都记录
下来,对我这个懒人来说比较困难。作为
IT
行业的一个老兵,
现在的兴趣已无法集中具体的
代码上了,吸引我的更多的是如何设计一个系统,使它的性
能和功能能符合某个领域的需求。
研究
OpenMeetings
p>
已经几个月了,当初对这个项目感兴趣是因为这个项目是一个基于
W
EB
的应用。
而目前绝大部分投入实用阶段的视频会议系统都是
基于
C/S
架构的,从
CISCO
p>
的基于硬件的专业化视频会
议系统,
到新浪
UC
、
9158
等开放的视频聊天或
KTV
系统,
都
必须安装客户端甚至专用硬件。
而
OpenMeetings<
/p>
的特点是它把前台构筑在
Flash
的基
础上(客户端被编译成了一个
swf
文件),如此,只要客户的
机器的浏
览器安装了
Flash Player
插件,就可以毫无障碍地运行起来。碍于
Flash
对
于
webcam
的视频和音频的实时
采
样压缩和传输的能力,目前在性能上,
OpenMeetings
还无法与
C/S
架构的视频会议系统相比。但
OpenMeetings
的先天优势在于它的完全
B
/S
架构,使得它可以无缝地与网站相衔接。
我们设想一些网络应用,比如企业的产品推广或者网上店铺
的商品展示,它们的目标对象大部分不是
固定的,而是随机的游客。采用传统的视频会议
系统,需要下载安装客户端并且注册登录等一堆操作,对
于只是路过的游客来说,
99%
是不可能做这些的。
假如我们只需要一个链接填写一个昵称就能进入到一个视频会议房间,该房间里有值班的客服,随时
p>
可以为你通过视频、白板等推介商品,那么至少有一半以上的游客是乐意这么做的。
我们设想的这个商业应用,很关键的一个环节是不需要注册和登录等等环节,也不需要用户熟悉这个
系统或者去搜索某个房间的入口,而是通过网站上的某个链接地址点击直接进入指定的房间。比如某个
网
购门户,
每个商家都在
OpenMe
etings
拥有一个产品推介房间,
那么它的店铺内就显示一
个直通该房间的链
接,游客点击该链接,系统要求用户输入一个昵称后就直接将用户重定
向到该房间内由房间值班员和用户
进行视频互动。
OK
,我们就把这个应用当作一个
方向来改进和设计
OpenMeetings
。那么今天的这篇
文章,就来讲述
一下如何在
OpenMeetings
上实现一个游客直通房间的功能。
首先,我们设计一个类,这个类用户实现游客的
登录名的自动生成。系统接受游客时需要自动为游客
生成一个登录名(
< br>login name
)
,
我们
可以把它涉及成
guestXXXXXX
的形式,
XXXXXX
的号码是从
0~999999
之间顺序生成的。
public
class
GuestNumManagement
{
private
static
GuestNumManagement
instance
=
null
;
private
long
currentNum
=0;
private
GuestNumManagement()
{
}
public
static
synchronized
GuestNumManagement getInstance() {
if
(
instance
==
null
) {
instance
=
new
GuestNumManagement();
}
return
instance
;
}
public
long
nextNum(){
if
(
currentNum
>999999){
resetNum();
}
long
n=
currentNum
++;
return
n;
}
public
void
resetNum(){
currentNum
=0;
}
}
p>
接下来,
我们仿照
OpenMeeting
s
的
SOAP
接口来实现一个
servlet
,
这个
servlet
接收房间号、
游客的昵称和性别,然后调用
p>
SOAP
接口组装成一个直接进入房间的
u
rl
,并且将用户浏览器重
定向到这个
url
。
public
class
DirectGateway
extends
HttpServlet
{
private
static
final
Logger
log
= ,
);
protected
void
service(HttpServletRequest
httpServletRequest,
HttpServletResponse
httpServletResponse)
throws
ServletException,
IOException {
(
);
(
);
(
);
try
{
etRoomById(room_id);
if
(roo
m==
null
){
PrintWriter out = ();
(
p>
指定的房间不存在或已被删除!
);
();
();
return
;
}
.
}
extNum();
username=
+(num)+<
/p>
;
etsessiondata();
String sessionId=();
oginUserEx(sessionId,(),
nul
l
,
false
,
null
);
Long
returnVal=
new
Long(-1);
if
(obj==
null
){
returnVal =
new
Long(-1);
}
String objName =
().getName();
if
(
)){
returnVal = (Long) obj;
}
else
{
returnVal =
new
Long(1);
}
if
(returnVal!=1){
PrintWriter out = ();
(
p>
房主授权验证失败
!
);
();
();
return
;
}
heckSession(sessionId);
Long user_level =
().getUserLevelByID(users_id);
returnVal =
new
Long(0);
ize()>=()){
.
if
(returnVal==0){
pdateUserRemoteSession(sessionId,
xmlString);
String hash =
().addSOAPLogin(sessionId, room_id,
false
,
false
,
false
,
null
);
if
(hash !=
null
) {
pageEncoding
=
%>
<%
String
roomid=(
);
if
(roomid==
null
< br>){
<
/p>
调试(
Debugging
)
附带一个嵌入式的命令行调试器
,可以在运行时显示警告和日志信息,并且可判读应用程序中
ECMAScript
p>
脚本的上下文表达式。
部署模式
Proxied
代理方式
SOLO
模式做不到的更多的事情,
但是部署起
来更加麻
代理模式部署应用程序可以做到<
/p>
烦,很多时候执行起来比较慢。
SOLO
方式
SOLO
更易于部
署,执行效率也更高。
工作
流
—
天气预报典型应用
不足
没有一个很好的集成开发环境(
IDE
)
。目前在
Laszlo IDE
Spket
Eclipse
下开发
Laszlo
应用有两种选择:
插件
插件。
Laszlo
的支持与
Flash B
uilder
相比较的话,
仍然任重道
前者已经停止了维护,
而后者对
远。<
/p>
无法在
< br>IDE
环境下做到
UI
的所见即
所得,或者在
IDE
环境下直接获得编译错误;
缺乏断点调试等方便的调试手段;
与商业软件
Flex
相比,参考资料和
书籍缺乏。
OpenMeetings
二次开发
(
二
)RED5
简介
OpenMeetings
2010-09-28
17:11:17
阅读
161
评论
0
字号:大中小
订阅
作者:老猫
前文介绍过,
OpenMeetings
的后台是在<
/p>
RED5
的基础上开发的。因此
Open
Meetings
的框架
与
RED5<
/p>
一脉相承,
不可分割。
OpenMeet
ings
的二次开发中,
负责编写后台的工程师必须对
RED5
有所了解,并且理解其基本概念及其框架。
在此,
整理了一些相关
RED5
的基础介绍以及开发
RED5
应用时必然会涉及的一些基本概念,
希望对朋友
们们有所帮助。
挑战
FMS
在介绍
RED5
之前,有必要先介绍一
下
Flash Media
Server
:
Flash
Media
Server
,简称
FMS
,是
Flash
大家庭里的一员,被称为是目前开发
Web
音视频应用程序(比如,视频聊天室、视频会议系统、播客系统
、音视频留言等等)的
最方便最快捷的解决方案。也在
web<
/p>
应用程序开发上有着越来越广泛的应用。
典型应用:
You
Tube
、土豆网
FMS
如此的优良功能当然并不是免费提供给广大用户的,几千美金每个点的价格让很
多开发人员望而却步。于是,开源的
Red5
成为人们的新宠。
RED5-
穷人的流媒体服务器
Red5
是一个采用
p>
Java
开发的开源的
Flash
流媒体服务器,功能上与
FMS
类似。它支持:
把音频(
MP3
)和视频(
FLV
)
转换成播放流;
录制客户端播放流(只支持
共享对象;
现场直播流发布;
远程调用。
FLV
)
;
Red5
使用
RSTP
作为流媒体传输协议,在其自带的一些
示例中实现了
在线录制
flash
流媒体播放
在线聊天
视频会议
RED5
中的几个个重要概念和模型
scope
Red5
中,所有资源形成一颗树,每一个节点被称为
sco
pe
,如果该节点是个叶子节点,那它被称为
BasicSco
pe
,如果该节点还有子节点,那它被
称为
Scope
。
Red5
里有两种预先定义好的
BasicScope
:
SharedObject
Scope
和
BroadcastStream
Scope
。
< br>每一个应用都有自己的
Scope
等级体系,根就是
p>
WebScope
(即此应用的实例)
。<
/p>
Red5
定义了一个全局
scope
p>
意在提供一个通用的资源供各个应
用共享
,称之为
GlobalScope
。
G
lobalScope
是所有的
WebScope
的父节点,
其余的中间
scopes
都是
Scope
的实例。
每一
个
scope
有一个名称。
GlobalScope
的名称是:
defau
lt
。
每一个
WebScope
的名字就是该应用上下文的名称。中间的
Scope
< br>的名字
就是它所在路径的名称。
SharedObject Scop
e
的名字就是
SharedOjbect
的名字,
BroadcastStream Scope
的名
字就是
Stream
的名字。
除了
GlobalScope
和
BasicScopes
外,其余
scope
都可以被一个
client
连接。一个客户端请求连接的结果
会
被用来创建一个
Scop
对象
.
例如:
一个客户端请求一个连接来连
oflaDemo/room0
,
而此时
p>
room0
的
scope
< br>并未存在,当创建了这个连接后,
room0
的
scope
被创建了,如果请求的
url
p>
里包含了中间多个
scope
,所
有的
scope
都会相应地被创建。比如:
p>
url
为:
oflaDemo/lobby
0/room0
,此时
room0
和<
/p>
lobby0
都不存在,
那他们都会被相
应的创建,然后,连接指向了
room0
这个
< br>scope
。
context
一个
Context
是和一个
Scope
对象绑定在一起的
,
它
用来给
scope object
提供额外的功能
.Context
对象可以
通过
()
来获得
.Context
包装
了
spring
的
application context,
因此
,spring
里声明的各种
bean
在此都可以使用
.
Context
可以被继承
.
这就是说
一个
Scope
可以继承它的父节点的
Context
而无需自己在定义一个
context,
只有
GlobalScope
和
WebScope
必须使用它们自己的
Contex
t
对象
.
“Scopes ”
和
“Contex
ts”
是开发
red5
重要概念。
p>
每个
application
在
Red5
中
仅仅只有一个
Context
。
Context
类实现了接口
IContext
。
context
实例对
象由
Java Spring
framework
初始化,
它提供作用路径映射和不同服务
接口。
每个
application
只
有一个
context
和一个
Web
Scope
,
WebScope
的名称和
context
的路径配置相关,它们名称虽相同但意义不同。
application
-
-
-
-
-
-
-
-
-
上一篇:CFD软件之phoenics
下一篇:OBD-II通讯协议