版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
HYPERLINKOpenMeetings2010-09-2916:42:53閱讀279評(píng)論0
字號(hào):大中小
訂閱作者:老貓
PhMeetings是基于開源WEB視頻會(huì)議系統(tǒng)OpenMeetings開發(fā)的一個(gè)實(shí)驗(yàn)性商業(yè)版本,原始藍(lán)本來自。老貓花了好幾個(gè)月的時(shí)間,費(fèi)了九牛二虎之力至今天終于完成了一個(gè)目前還算過得去的版本,沾沾自喜中……由于資料的缺乏以及對(duì)OpenLaszlo編程的陌生,其中艱辛不足為外人道。今日發(fā)一聲感慨:如果你想折磨一個(gè)程序員,那就讓他去干開源軟件的二次開發(fā)!
好了,言歸正傳,先推銷一下PhMeetings的演示地址:6:5080/phmeetings
參考國(guó)內(nèi)流行的一些C/S架構(gòu)下的網(wǎng)絡(luò)視頻會(huì)議系統(tǒng),老貓的PhMeetings在OpenMeetings基礎(chǔ)上增加了一些適合獨(dú)立進(jìn)行商業(yè)運(yùn)營(yíng)的概念和功能,同時(shí)也刪減了一些不符合國(guó)內(nèi)網(wǎng)絡(luò)環(huán)境或者形同雞肋的功能。
刪除的功能有:
SIP接入網(wǎng)關(guān)(IPphone在國(guó)內(nèi)基本用不上)
預(yù)約會(huì)議功能(這個(gè)在商業(yè)運(yùn)營(yíng)商很難掌控)
屏幕共享功能(除非部署在局域網(wǎng)環(huán)境,否則會(huì)把人急死)
取消了其它類型房間的錄制功能,只保留interview類型房間內(nèi)的錄制功能
新增的概念或功能:
房間目錄樹概念:用于對(duì)房間采用樹狀目錄管理
新增用戶類型:房主。使得房間的租用概念得以商業(yè)化推廣。
房間計(jì)費(fèi)管理及租用到期提醒功能
新增房間管理后臺(tái)功能:房主可以管理房間超級(jí)主持人、LOGO、背景、黑名單、白名單、鏈接及廣告等。
房間收藏和房間搜索功能:方便在眾多的房間中找到你想要去的。
房間鎖功能:可對(duì)房間設(shè)置進(jìn)入密碼。
踢出房間功能:超級(jí)管理員或者房主有權(quán)在房間里將搗亂的用戶踢出系統(tǒng)。
黑名單功能:將用戶ID或者IP加入房間黑名單,該用戶將被該房間拒之門外。
白名單功能:列入房間白名單的用戶在房間設(shè)置密碼鎖時(shí)可以不必輸入密碼驗(yàn)證。
游客直接通過鏈接進(jìn)入房間功能:房間租用者可以對(duì)游客開展產(chǎn)品推介或其它客服服務(wù)。
房間內(nèi)顯示背景、LOGO、廣告及鏈接功能
房間歡迎語滾動(dòng)顯示
增加了全屏顯示功能(可惜全屏?xí)r聊天的輸入無法使用)
增加了視頻配置里的視頻幀數(shù)調(diào)節(jié)
改進(jìn)的部分有:
對(duì)界面進(jìn)行美化和改進(jìn)
修正了移植數(shù)據(jù)庫(kù)到ORACLE時(shí)的一些BUG
改進(jìn)了房間的整體布局
對(duì)中文化不徹底的地方進(jìn)行了完善
改進(jìn)了視頻的顯示和布局方式
改進(jìn)了攝像頭采集區(qū)域的一些BUG
優(yōu)化了音頻和視頻參數(shù)配置
增加用戶默認(rèn)頭像的性別區(qū)分
將用戶信息從firstname、lastname等西方習(xí)慣改為昵稱
歡迎有興趣的朋友注冊(cè)PhMeetings參與體驗(yàn)?;蛘咭杂慰蜕矸葜苯舆M(jìn)入OpenMeetings技術(shù)群專屬房間參與討論。OpenMeetings二次開發(fā)實(shí)例(一)游客直接進(jìn)入房間OpenMeetings2010-09-2910:42:15閱讀474評(píng)論1
字號(hào):大中小
訂閱作者:老貓決定寫點(diǎn)東西,技術(shù)細(xì)節(jié)上的東西在二次開發(fā)過程中可以慢慢摸索和體會(huì),如果要把這些改造過程中的細(xì)節(jié)都記錄下來,對(duì)我這個(gè)懶人來說比較困難。作為IT行業(yè)的一個(gè)老兵,現(xiàn)在的興趣已無法集中具體的代碼上了,吸引我的更多的是如何設(shè)計(jì)一個(gè)系統(tǒng),使它的性能和功能能符合某個(gè)領(lǐng)域的需求。
研究OpenMeetings已經(jīng)幾個(gè)月了,當(dāng)初對(duì)這個(gè)項(xiàng)目感興趣是因?yàn)檫@個(gè)項(xiàng)目是一個(gè)基于WEB的應(yīng)用。而目前絕大部分投入實(shí)用階段的視頻會(huì)議系統(tǒng)都是基于C/S架構(gòu)的,從CISCO的基于硬件的專業(yè)化視頻會(huì)議系統(tǒng),到新浪UC、9158等開放的視頻聊天或KTV系統(tǒng),都必須安裝客戶端甚至專用硬件。而OpenMeetings的特點(diǎn)是它把前臺(tái)構(gòu)筑在Flash的基礎(chǔ)上(客戶端被編譯成了一個(gè)swf文件),如此,只要客戶的機(jī)器的瀏覽器安裝了FlashPlayer插件,就可以毫無障礙地運(yùn)行起來。礙于Flash對(duì)于webcam的視頻和音頻的實(shí)時(shí)采樣壓縮和傳輸?shù)哪芰?,目前在性能上,OpenMeetings還無法與C/S架構(gòu)的視頻會(huì)議系統(tǒng)相比。但OpenMeetings的先天優(yōu)勢(shì)在于它的完全B/S架構(gòu),使得它可以無縫地與網(wǎng)站相銜接。
我們?cè)O(shè)想一些網(wǎng)絡(luò)應(yīng)用,比如企業(yè)的產(chǎn)品推廣或者網(wǎng)上店鋪的商品展示,它們的目標(biāo)對(duì)象大部分不是固定的,而是隨機(jī)的游客。采用傳統(tǒng)的視頻會(huì)議系統(tǒng),需要下載安裝客戶端并且注冊(cè)登錄等一堆操作,對(duì)于只是路過的游客來說,99%是不可能做這些的。假如我們只需要一個(gè)鏈接填寫一個(gè)昵稱就能進(jìn)入到一個(gè)視頻會(huì)議房間,該房間里有值班的客服,隨時(shí)可以為你通過視頻、白板等推介商品,那么至少有一半以上的游客是樂意這么做的。
我們?cè)O(shè)想的這個(gè)商業(yè)應(yīng)用,很關(guān)鍵的一個(gè)環(huán)節(jié)是不需要注冊(cè)和登錄等等環(huán)節(jié),也不需要用戶熟悉這個(gè)系統(tǒng)或者去搜索某個(gè)房間的入口,而是通過網(wǎng)站上的某個(gè)鏈接地址點(diǎn)擊直接進(jìn)入指定的房間。比如某個(gè)網(wǎng)購(gòu)門戶,每個(gè)商家都在OpenMeetings擁有一個(gè)產(chǎn)品推介房間,那么它的店鋪內(nèi)就顯示一個(gè)直通該房間的鏈接,游客點(diǎn)擊該鏈接,系統(tǒng)要求用戶輸入一個(gè)昵稱后就直接將用戶重定向到該房間內(nèi)由房間值班員和用戶進(jìn)行視頻互動(dòng)。
OK,我們就把這個(gè)應(yīng)用當(dāng)作一個(gè)方向來改進(jìn)和設(shè)計(jì)OpenMeetings。那么今天的這篇文章,就來講述一下如何在OpenMeetings上實(shí)現(xiàn)一個(gè)游客直通房間的功能。
首先,我們?cè)O(shè)計(jì)一個(gè)類,這個(gè)類用戶實(shí)現(xiàn)游客的登錄名的自動(dòng)生成。系統(tǒng)接受游客時(shí)需要自動(dòng)為游客生成一個(gè)登錄名(loginname),我們可以把它涉及成guestXXXXXX的形式,XXXXXX的號(hào)碼是從0~999999之間順序生成的。
publicclassGuestNumManagement{
privatestaticGuestNumManagementinstance=null;
privatelongcurrentNum=0;
privateGuestNumManagement(){
}
publicstaticsynchronizedGuestNumManagementgetInstance(){
if(instance==null){
instance=newGuestNumManagement();
}
returninstance;
}
publiclongnextNum(){
if(currentNum>999999){
resetNum();
}
longn=currentNum++;
returnn;
}
publicvoidresetNum(){
currentNum=0;
}}
接下來,我們仿照OpenMeetings的SOAP接口來實(shí)現(xiàn)一個(gè)servlet,這個(gè)servlet接收房間號(hào)、游客的昵稱和性別,然后調(diào)用SOAP接口組裝成一個(gè)直接進(jìn)入房間的url,并且將用戶瀏覽器重定向到這個(gè)url。
publicclassDirectGatewayextendsHttpServlet{
privatestaticfinalLoggerlog=Red5LoggerFactory.getLogger(DirectGateway.class,"phmeetings");
protectedvoidservice(HttpServletRequesthttpServletRequest,
HttpServletResponsehttpServletResponse)throwsServletException,
IOException{
httpServletRequest.setCharacterEncoding("utf-8");
httpServletResponse.setContentType("text/html;charset=utf-8");
httpServletResponse.setCharacterEncoding("utf-8");
try{
//獲得房間ID
Stringroomid=httpServletRequest.getParameter("roomid");
if(roomid==null){
PrintWriterout=httpServletResponse.getWriter();
out.println("未獲得roomid,請(qǐng)檢查參數(shù)!");
out.flush();
out.close();
return;
}
if(roomid.equals("")){
PrintWriterout=httpServletResponse.getWriter();
out.println("房間ID不能為空且必須是一個(gè)整數(shù)!");
out.flush();
out.close();
}
Longroom_id=null;
try{
room_id=Long.parseLong(roomid);
}
catch(Exceptione){
PrintWriterout=httpServletResponse.getWriter();
out.println("房間ID必須是一個(gè)數(shù)值!");
out.flush();
out.close();
return;
}
//檢查是否有該房間
Roomsroom=Roommanagement.getInstance().getRoomById(room_id);
if(room==null){
PrintWriterout=httpServletResponse.getWriter();
out.println("指定的房間不存在或已被刪除!");
out.flush();
out.close();
return;
}
//獲得昵稱
Stringnickname=null;
Integersex=newInteger(0);
try{
nickname=httpServletRequest.getParameter("nickname");ameter("sex");
if(sSex==null||sSex.equals("")){
sex=null;
}else{
sex=Integer.parseInt(sSex);
}
}
catch(Exceptione){
//...
}
//生成用戶名,格式為guestXXXXXX
Stringusername=null;
//獲得新序號(hào)
longnum=GuestNumManagement.getInstance().nextNum();
username="guest"+Long.toString(num)+"~";
//~符號(hào)表示為游客
//第一步,獲得session
SessiondatasessionData=MainService.getInstance().getsessiondata();
StringsessionId=sessionData.getSession_id();
//第二步,登錄用戶
Usersuser=room.getUser();
//擴(kuò)展登錄方法,使得直接用MD5比對(duì)
Objectobj=Usermanagement.getInstance().loginUserEx(sessionId,user.getLogin(),null,false,null);
LongreturnVal=newLong(-1);
if(obj==null){
returnVal=
newLong(-1);
}
StringobjName=obj.getClass().getName();
if(objName.equals("java.lang.Long")){
returnVal=(Long)obj;
}else{
returnVal=newLong(1);
}
if(returnVal!=1){
PrintWriterout=httpServletResponse.getWriter();
out.println("房主授權(quán)驗(yàn)證失敗!");
out.flush();
out.close();
return;
}
//第三步,獲得Hash
Longusers_id=Sessionmanagement.getInstance().checkSession(sessionId);
Longuser_level=Usermanagement.getInstance().getUserLevelByID(users_id);
returnVal=newLong(0);
//驗(yàn)證房間人數(shù)
if(room.getCurrentusers()!=null){
if(room.getCurrentusers().size()>=room.getNumberOfPartizipants()){
//房間已滿
returnVal=newLong(-1001);
}
}
//其它驗(yàn)證:是否加鎖、IP地址是否列入黑名單
//...
if(returnVal==0){
//更新session里的數(shù)據(jù)
RemoteSessionObjectremoteSessionObject=newRemoteSessionObject(username,nickname,sex,
"","",null,"");
XStreamxStream=newXStream(newDomDriver("UTF-8"));
xStream.setMode(XStream.NO_REFERENCES);
StringxmlString=xStream.toXML(remoteSessionObject);
log.debug("xmlString"+xmlString);
Sessionmanagement.getInstance().updateUserRemoteSession(sessionId,xmlString);
Stringhash=SOAPLoginDAO.getInstance().addSOAPLogin(sessionId,room_id,
false,false,false,null);
if(hash!=null){
//重定向
Stringwebroot=ScopeApplicationAdapter.webAppRootKey;
//調(diào)試使用
//httpServletResponse.sendRedirect("/"+webroot+"/maindebug.lzx?secureHash="+hash+"&lzproxied=solo&lzr=swf8");
//正式
httpServletResponse.sendRedirect("/"+webroot+"/main.swf8.swf?secureHash="+hash+"&lzproxied=solo");
}
else{
returnVal=newLong(-1);
}
}
if(returnVal!=0){
PrintWriterout=httpServletResponse.getWriter();
if(returnVal==-1001){
out.println("房間已滿,請(qǐng)稍后再試!");
}
else{
out.println("未知錯(cuò)誤!");
}
out.flush();
out.close();
return;
}
}catch(Exceptioner){
log.error("ERROR",er);
System.out.println("Errorexporting:"+er);
er.printStackTrace();
}
}}
需要提一下的是,上述代碼中,在第二步時(shí),我使用了一個(gè)loginUserEx的方法,這個(gè)方法是我自己的擴(kuò)展的,目的是把從原有的基于管理員的用戶驗(yàn)證改成基于房主的身份驗(yàn)證。room.getUser()方法也是擴(kuò)展的,即獲得房間的房主用戶,然后使用loginUserEx來驗(yàn)證。讀者可以仍然使用loginUser的方法來代替loginUserEx,但這里必須使用管理員的登錄名和密碼。
接下來,我們?cè)賮碓O(shè)計(jì)一個(gè)輸入用戶昵稱的頁(yè)面,讓用戶點(diǎn)擊鏈接后先在該頁(yè)面輸入昵稱和性別再由該頁(yè)面將數(shù)據(jù)提交給上面的servlet。文件:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%Stringroomid=request.getParameter("roomid");if(roomid==null){
//重定向到注冊(cè)登錄
response.sendRedirect("/index.jsp");}
%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html>
<head>
<title>OpenMeetings游客入口</title>
</head>
<body>
普惠天下網(wǎng)頁(yè)視頻會(huì)議
游客入口<br>
<formname="UserInfo"method="post"action="/DirectGateway">
<tableborder="1">
<tbody>
<tr>
<td>昵稱:</td>
<td><inputtype="text"name="nickname"value=""/></td>
<td>需填寫</td>
</tr>
<tr>
<td>性別:</td>
<td>
<selectname="sex">
<optionvalue="1"selected="selected">先生</option>
<optionvalue="0">女士</option>
</select>
</td>
<tdcolspan="3"align="center"><inputtype="submit"value="進(jìn)入房間"/></td>
</tr>
</tbody>
</table>
<inputtype="hidden"name="roomid"value="<%=roomid%>"
/>
</form>
<ahref="/index.jsp"target=_blank>登錄注冊(cè)入口</a>
</body></html>
OK,一個(gè)讓游客直通房間的功能完成了。讓我們來測(cè)試一下。輸入房間鏈接:
http://localhost:5080/openmeetings/direct.jsp?roomid=2
然后,輸入你的昵稱,點(diǎn)“進(jìn)入房間”,等待幾秒到十幾秒鐘,好了,你被瞬移到房間內(nèi)了。
附:我的OpenMeetings改造作品演示地址:6:5080/phmeetings
OpenMeetings群專用會(huì)議室游客入口:6:5080/phmeetings/direct.jsp?roomid=7OpenMeetings二次開發(fā)(三)OpenLaszlo基礎(chǔ)OpenMeetings2010-09-2817:34:03閱讀306評(píng)論0
字號(hào):大中小
訂閱作者:老貓3.1OpenLaszlo的前世今身OpenLaszlo在國(guó)內(nèi)應(yīng)用并不廣泛,但在國(guó)外,它是一個(gè)與Flex并駕齊驅(qū)的主流的開源RIA構(gòu)建平臺(tái)。OpenLaszlo的前身是LPS(LaszloPresentationServer),由LaszloSystems公司在2002年發(fā)布,LPS是那個(gè)時(shí)代誕生的第一個(gè)RIA產(chǎn)品。根據(jù)市場(chǎng)和用戶的需要,LaszloSystems公司于2004年在CPL協(xié)議下發(fā)布了LPS的開源產(chǎn)品OpenLaszlo。
OpenLaszlo的最新版本是,支持Ajax(DHTML)和Flash8、Flash9。其代號(hào)是orbit的版本是Sun和LaszloSystems公司共同開發(fā)的產(chǎn)品,目的是能讓OpenLaszlo程序運(yùn)行在包括J2ME在內(nèi)的任何Java平臺(tái)上,比如移動(dòng)電話、PDA、電視機(jī)頂盒、打印機(jī),等等。
3.2OpenLaszlo相比Flex的優(yōu)勢(shì)?
它是開源的(CPL協(xié)議)?
基于開發(fā)者熟悉的技術(shù)(JavaScript、XML)。?
支持DHML方式。
OpenLaszlo編程入門非常簡(jiǎn)單,大部分的語法與JavaScript一致,整體的結(jié)構(gòu)遵循XML原則。對(duì)于一個(gè)Web前臺(tái)工程師來說,和它平時(shí)的工作沒有太大區(qū)別,只要熟悉了幾個(gè)基本概念,如canvas、class、layout等,就馬上可以上手。當(dāng)前,OpenLaszlo帶有豐富的控件庫(kù)和類庫(kù),要熟悉和使用好這些東西,卻需要狠很地花上一番功夫。3.3OpenLaszlo的框架
OpenLaszlo的SDK包括:
一個(gè)Java寫的編譯器
一個(gè)JavaScript的運(yùn)行庫(kù)(Runtime)
一個(gè)運(yùn)行應(yīng)用程序的附加的Servlet(可選)
3.4OpenLaszlo的編譯3.4.1編譯原理?
OpenLazslo編譯器將LZX源文件編譯成目標(biāo)運(yùn)行環(huán)境(runtime)下的可執(zhí)行二進(jìn)制文件?
OpenLaszlo目前的目標(biāo)環(huán)境是:?
Flashplayer8?
Flashplayer9?
DHTML
3.4.2編譯過程發(fā)生了什么??
XMLUI編譯?
把lzx文件中用XML描述的用戶界面(UI)編譯成在Flash下可執(zhí)行的swf字節(jié)代碼或者DHML。?
ECMAScript編譯?
把lzx文件中用ECMAScript表示的帶有方法和事件句柄的用戶界面類和實(shí)例編譯成優(yōu)化的字節(jié)代碼。?
媒體、數(shù)據(jù)和字體編譯?
轉(zhuǎn)換PNG、JPG,GIF,SWF,MP3和TrueType字體文件,并把它們嵌入到應(yīng)用對(duì)象文件(僅用于swf)。?
SizeProfiling?
Html報(bào)告應(yīng)用程序的大小
3.4.3編譯模式和服務(wù)器框架
代理方式(Proxied)
SOLO方式
3.5OpenLaszlo客戶端框架
OpenLaszlo-RuntimeLibrary(LFC)
組件(Components)
一個(gè)豐富的UI組件庫(kù)
布局(Layout)
多樣化的布局管理器管理,當(dāng)UI組件的尺寸發(fā)生變化時(shí)能自動(dòng)調(diào)整UI組件的位置。
動(dòng)畫(Animation)
通過使用聲明的動(dòng)畫系統(tǒng),為所有UI部件提供可聲明的或可編程的動(dòng)畫,為高質(zhì)量的動(dòng)畫設(shè)計(jì)帶來自動(dòng)化的易入易出體驗(yàn)。
約束(Constraints)
可聲明的約束系統(tǒng),在數(shù)據(jù)源的值改變、其他用戶接口組件的屬性值改變、或者用戶事件發(fā)生時(shí),能夠自動(dòng)更新用戶接口的屬性。
數(shù)據(jù)綁定(Databinding)
可以從XML數(shù)據(jù)集自動(dòng)填充用戶接口組件值,可以生成多個(gè)組件的副本來匹配多個(gè)數(shù)據(jù)值。
XMLServices
HTTPrequestsforXML
SOAP
XML-RPC
JavaRPCservices.
調(diào)試(Debugging)
附帶一個(gè)嵌入式的命令行調(diào)試器,可以在運(yùn)行時(shí)顯示警告和日志信息,并且可判讀應(yīng)用程序中ECMAScript腳本的上下文表達(dá)式。
3.6部署模式
Proxied代理方式
代理模式部署應(yīng)用程序可以做到SOLO模式做不到的更多的事情,但是部署起來更加麻煩,很多時(shí)候執(zhí)行起來比較慢。
SOLO方式
SOLO更易于部署,執(zhí)行效率也更高。
3.7工作流—天氣預(yù)報(bào)典型應(yīng)用
3.8不足
沒有一個(gè)很好的集成開發(fā)環(huán)境(IDE)。目前在Eclipse下開發(fā)Laszlo應(yīng)用有兩種選擇:
LaszloIDE插件
Spket插件。
前者已經(jīng)停止了維護(hù),而后者對(duì)Laszlo的支持與FlashBuilder相比較的話,仍然任重道遠(yuǎn)。
無法在IDE環(huán)境下做到UI的所見即所得,或者在IDE環(huán)境下直接獲得編譯錯(cuò)誤;
缺乏斷點(diǎn)調(diào)試等方便的調(diào)試手段;
與商業(yè)軟件Flex相比,參考資料和書籍缺乏。OpenMeetings二次開發(fā)(二)RED5簡(jiǎn)介HYPERLINKOpenMeetings2010-09-2817:11:17閱讀161評(píng)論0
字號(hào):大中小
訂閱作者:老貓
前文介紹過,OpenMeetings的后臺(tái)是在RED5的基礎(chǔ)上開發(fā)的。因此OpenMeetings的框架與RED5一脈相承,不可分割。OpenMeetings的二次開發(fā)中,負(fù)責(zé)編寫后臺(tái)的工程師必須對(duì)RED5有所了解,并且理解其基本概念及其框架。
在此,整理了一些相關(guān)RED5的基礎(chǔ)介紹以及開發(fā)RED5應(yīng)用時(shí)必然會(huì)涉及的一些基本概念,希望對(duì)朋友們們有所幫助。2.1挑戰(zhàn)FMS
在介紹RED5之前,有必要先介紹一下FlashMediaServer:
FlashMediaServer,簡(jiǎn)稱FMS,是Flash大家庭里的一員,被稱為是目前開發(fā)Web音視頻應(yīng)用程序(比如,視頻聊天室、視頻會(huì)議系統(tǒng)、播客系統(tǒng)、音視頻留言等等)的最方便最快捷的解決方案。也在web應(yīng)用程序開發(fā)上有著越來越廣泛的應(yīng)用。
典型應(yīng)用:YouTube、土豆網(wǎng)
FMS如此的優(yōu)良功能當(dāng)然并不是免費(fèi)提供給廣大用戶的,幾千美金每個(gè)點(diǎn)的價(jià)格讓很多開發(fā)人員望而卻步。于是,開源的Red5成為人們的新寵。
2.2RED5-窮人的流媒體服務(wù)器
Red5是一個(gè)采用Java開發(fā)的開源的Flash流媒體服務(wù)器,功能上與FMS類似。它支持:
把音頻(MP3)和視頻(FLV)轉(zhuǎn)換成播放流;
錄制客戶端播放流(只支持FLV);
共享對(duì)象;
現(xiàn)場(chǎng)直播流發(fā)布;
遠(yuǎn)程調(diào)用。
Red5使用RSTP作為流媒體傳輸協(xié)議,在其自帶的一些示例中實(shí)現(xiàn)了
在線錄制
flash流媒體播放
在線聊天
視頻會(huì)議
2.3RED5中的幾個(gè)個(gè)重要概念和模型2.3.1scopeRed5中,所有資源形成一顆樹,每一個(gè)節(jié)點(diǎn)被稱為scope,如果該節(jié)點(diǎn)是個(gè)葉子節(jié)點(diǎn),那它被稱為BasicScope,如果該節(jié)點(diǎn)還有子節(jié)點(diǎn),那它被稱為Scope。Red5里有兩種預(yù)先定義好的BasicScope:SharedObjectScope和BroadcastStreamScope。
每一個(gè)應(yīng)用都有自己的Scope等級(jí)體系,根就是WebScope(即此應(yīng)用的實(shí)例)。Red5定義了一個(gè)全局scope意在提供一個(gè)通用的資源供各個(gè)應(yīng)用共享,稱之為GlobalScope。GlobalScope是所有的WebScope的父節(jié)點(diǎn),其余的中間scopes都是Scope的實(shí)例。每一個(gè)scope有一個(gè)名稱。GlobalScope的名稱是:default。每一個(gè)WebScope的名字就是該應(yīng)用上下文的名稱。中間的Scope的名字就是它所在路徑的名稱。SharedObjectScope的名字就是SharedOjbect的名字,BroadcastStreamScope的名字就是Stream的名字。
除了GlobalScope和BasicScopes外,其余scope都可以被一個(gè)client連接。一個(gè)客戶端請(qǐng)求連接的結(jié)果會(huì)被用來創(chuàng)建一個(gè)Scop對(duì)象.例如:一個(gè)客戶端請(qǐng)求一個(gè)連接來連oflaDemo/room0,而此時(shí)room0的scope并未存在,當(dāng)創(chuàng)建了這個(gè)連接后,room0的scope被創(chuàng)建了,如果請(qǐng)求的url里包含了中間多個(gè)scope,所有的scope都會(huì)相應(yīng)地被創(chuàng)建。比如:url為:oflaDemo/lobby0/room0,此時(shí)room0和lobby0都不存在,那他們都會(huì)被相應(yīng)的創(chuàng)建,然后,連接指向了room0這個(gè)scope。2.3.2context
一個(gè)Context是和一個(gè)Scope對(duì)象綁定在一起的,它用來給scopeobject提供額外的功能.Context對(duì)象可以通過IContext.getScope()來獲得.Context包裝了spring的applicationcontext,因此,spring里聲明的各種bean在此都可以使用.
Context可以被繼承.這就是說一個(gè)Scope可以繼承它的父節(jié)點(diǎn)的Context而無需自己在定義一個(gè)context,只有GlobalScope和WebScope必須使用它們自己的Context對(duì)象.“Scopes”和“Contexts”是開發(fā)red5重要概念。
每個(gè)application在Red5中僅僅只有一個(gè)Context。Context類實(shí)現(xiàn)了接口IContext。context實(shí)例對(duì)象由JavaSpringframework初始化,它提供作用路徑映射和不同服務(wù)接口。每個(gè)application只有一個(gè)context和一個(gè)WebScope,WebScope的名稱和context的路徑配置相關(guān),它們名稱雖相同但意義不同。2.3.3application利用red5創(chuàng)建的任何應(yīng)用常常都和“application”有關(guān),applications是建立在flash客戶端和red5服務(wù)之間以任何形式交互的基礎(chǔ)和基本概念。術(shù)語"application"來源于FlashMediaServer(FMS),Adobe研發(fā)用于和flash客戶端通信的軟件。red5使用更復(fù)雜模式來處理flash客戶端的請(qǐng)求,red5使用類似于搭積木組合方式來模擬FMS
的application“概念;簡(jiǎn)而言之,如你在red創(chuàng)建以一個(gè)"application",那么同時(shí)創(chuàng)建了一個(gè)WebScope
(scope的一種)、一個(gè)Context和一個(gè)handler。樹的根-RootScope-存在于所有的applications當(dāng)中(所有的applications都可以訪問),RootScope代碼命名為"default",它是類GlobalScope的一個(gè)實(shí)例主要為applications提供通用的共享資源。RootScope隱含為其他Scope之上的Scope,也就說不能被任何連接的客戶端直接命名。RootScope直接下級(jí)scope是一系列特別的scopes,每一個(gè)scope代表了red5服務(wù)器運(yùn)行的一個(gè)application,這些scope命名和application上下文命名一致,這些scope是類WebScope的一個(gè)實(shí)例,因?yàn)檫@些scope命名和application上下文命名一致導(dǎo)致很難區(qū)分它們,事實(shí)上他們是完全不同的兩個(gè)東西。WebScope下面的節(jié)點(diǎn),稍微有些不同,每一個(gè)WebScope被運(yùn)行它的
red5服務(wù)器顯示的定義;每一個(gè)WebScope擁有自己的配置文件,并且可以看做是獨(dú)立的application。如果想創(chuàng)建WebScope作用域你需要在red5下創(chuàng)建
application目錄和配置文件。在WebScope下創(chuàng)建指定的作用域,指定的作用域就會(huì)被動(dòng)態(tài)的創(chuàng)建(如果指定作用域沒有被創(chuàng)建)。例如,假如沒有一個(gè)應(yīng)用沒有創(chuàng)建“myApp”的作用域。某個(gè)flash客戶端連接到"rtmp://red5serverHostname/myApp/aaa/bbb/ccc"
red5會(huì)檢查"aaa"是否已經(jīng)存在,如果不存在就創(chuàng)建"aaa"作用域,同理"bbb"和"ccc"。每一個(gè)WebScope
之下的動(dòng)態(tài)作用域命名和給定的連接路徑名稱一致,例如上面的例子,作用域的名稱分別是
'aaa','bbb',和'ccc'。這些作用域分別由Scope類或者BasicScope類來實(shí)例化。沒有子節(jié)點(diǎn)的葉子節(jié)點(diǎn)通常由BasicScope類實(shí)例化,非子節(jié)點(diǎn)由Scope類實(shí)例化。這些作用域都為flash客戶端提供功能調(diào)用,但是當(dāng)flash客戶端連接到葉子域時(shí),葉子域提供更有用的功能調(diào)用。例如,"ccc"域可以提供在線流連接或者"sharedobject"連接,并允許多個(gè)flash客戶端數(shù)據(jù)共享。2.3.4Handler
現(xiàn)在,我們有了如何讓flash客戶端怎樣去連接的scope系統(tǒng),有了來映射作用域請(qǐng)求的context,和服務(wù)應(yīng)用代碼。這些代碼位于Handler。handler
是red5application主要功能的實(shí)現(xiàn),它實(shí)現(xiàn)了客戶端連接和斷開連接的方法,實(shí)現(xiàn)了客戶端遠(yuǎn)程調(diào)用(RPC)的方法。application的初始化入口是從實(shí)例化WebScope
類開始的。當(dāng)客戶端連接這個(gè)application,red5需要調(diào)用WebScope類多個(gè)方法來初始化。因此application'shandler需要實(shí)現(xiàn)IScopeHandler接口,這個(gè)接口定義red5必須要調(diào)用的方法。handler由這些開發(fā)red5應(yīng)用的創(chuàng)建,通常也需要擴(kuò)展red5已經(jīng)實(shí)現(xiàn)的ApplicationAdapter類或者M(jìn)ultiThreadedApplicationAdapter類,這些類已經(jīng)實(shí)現(xiàn)了基本的handler功能,并且實(shí)現(xiàn)了必須實(shí)現(xiàn)的IScopeHandler接口。OpenMeetings二次開發(fā)(一)OpenMeetings基礎(chǔ)HYPERLINKOpenMeetings2010-09-2817:02:39閱讀180評(píng)論0
字號(hào):大中小
訂閱作者:老貓1.1OpenMeetings概述OpenMeetings是一個(gè)多語言可定制的視頻會(huì)議和協(xié)作系統(tǒng)。它支持音頻、視頻,能讓你查看每個(gè)與會(huì)者的桌面。OpenMeetings還包含一個(gè)白板,通過白板可以導(dǎo)入各種格式的圖片和涂鴉。OpenMeetings開發(fā)團(tuán)隊(duì)由來自全球各地的28位成員組成,具有很強(qiáng)的技術(shù)實(shí)力,團(tuán)隊(duì)負(fù)責(zé)人seba.wagner同時(shí)還是另一個(gè)重要開源軟件RED5的核心維護(hù)者。
OpenMeetings是一個(gè)優(yōu)秀的開源項(xiàng)目,當(dāng)然更加優(yōu)秀的是支撐它的另兩個(gè)開源項(xiàng)目:一個(gè)是大名鼎鼎的號(hào)稱窮人的流媒體服務(wù)器的RED5;另一個(gè)同樣也是RIA開發(fā)的頂梁柱之一:OpenLaszlo。1.2OpenMeetings組成
Openmeetings是一款基于Flash的多語言可定制的開源(EPL)視頻會(huì)議軟件,通過RTMP和HTTP協(xié)議傳送視頻數(shù)據(jù)。支持在線聊天,視頻,文件共享,桌面共享。它還包含一個(gè)白板,通過白板可以導(dǎo)入各種格式的文檔、圖片和涂鴉。
客戶端用OpenLaszlo開發(fā),在Flashplayer環(huán)境下運(yùn)行。
服務(wù)器端采用Java開發(fā),采用了Spring和Hibernate框架。
流媒體服務(wù)基于開源軟件Red5。
其它的第三方輔助軟件:
OpenOffice:文檔轉(zhuǎn)換
ImgMagic:圖像處理
GhostScript:閱讀開放性文檔
SWFTools:將pdf文檔轉(zhuǎn)為flash格式在白板中播放
FFMpeg:錄制、轉(zhuǎn)換和流化音頻和視頻
1.3OpenMeetings與傳統(tǒng)的視頻會(huì)議相比的優(yōu)勢(shì)
基于瀏覽器的網(wǎng)頁(yè)視頻會(huì)議系統(tǒng);
客戶端電腦只需Flash插件;
無需下載安裝任何客戶端;
入口可嵌入客戶的企業(yè)網(wǎng)站;
實(shí)現(xiàn)視頻會(huì)議、電子白板、文字聊天、文檔轉(zhuǎn)換和共享、屏幕共享、視頻錄制、后臺(tái)管理等功能;
具備會(huì)議室、聊天室、面談室等多種房間配置;
可建立公共房間、私有房間、個(gè)人房間、預(yù)約房間等多種房間模式。
1.4OpenMeetings的特點(diǎn)
完全開源的系統(tǒng)
組建一套OpenMeetings,可以選擇從操作系統(tǒng)(Linux)到數(shù)據(jù)庫(kù)(MySQL)到流媒體服務(wù)器(RED5)到輔助軟件(OpenOffice、FFMpeg等)到開發(fā)環(huán)境(OpenLaszlo、Eclipse)等完全開源的系統(tǒng)。
跨平臺(tái),支持多種數(shù)據(jù)庫(kù)?
WIN32、Linux、MacOS?
MySQL、Postgres、ORACLE、DB2?
國(guó)際化
與各種第三方應(yīng)用整合,擴(kuò)展性強(qiáng)?
SIPPhone網(wǎng)關(guān)?
SingleSignOn?
LDAP1.5功能
1.6后臺(tái)管理
組織管理
連接管理
房間管理
用戶管理
國(guó)際化語言管理
系統(tǒng)配置管理
數(shù)據(jù)備份管理1.7平臺(tái)框架
1.8開發(fā)環(huán)境搭建
源代碼下載:
JRE
基本IDE:Eclipse/MyEclipse
插件:SVN,Spket
第三方支持:,F(xiàn)FMpeg,SWFTools,ImageMagic,SoX1.9系統(tǒng)模型
上圖的模型中,OpenMeetings的后臺(tái)是一系列的service組成的,這些service由Java語言編寫,這些service的實(shí)現(xiàn)類大都在包中,該包封裝了大部分前后臺(tái)交互的類。如文件服務(wù)、用戶服務(wù)、會(huì)議服務(wù)、流服務(wù)等等。
前臺(tái)是由OpenLaszlo編寫lzx文件,編譯完成后是一個(gè)Flash的形式(swf文件)。前后臺(tái)的交互大部分通過RPC調(diào)用實(shí)現(xiàn),即OpenLaszlo程序遠(yuǎn)程調(diào)用后臺(tái)的Java類,也有部分回調(diào)。OpenLaszlo中RPC調(diào)用的實(shí)現(xiàn)可以參閱OpenLaszlo的開發(fā)指南。
前后臺(tái)的交互也有少部分是通過http協(xié)議完成的,比如圖片的上傳和現(xiàn)實(shí),文檔的上傳等等。這一部分與傳統(tǒng)的B/S架構(gòu)是類似,后臺(tái)是Java語言編寫的servlet,這些servlet位于包。1.10技術(shù)體系層次OpenMeetins音視頻參數(shù)設(shè)置及優(yōu)化HYPERLINKOpenMeetings2010-09-2710:33:16閱讀142評(píng)論0
字號(hào):大中小
訂閱作者:老貓一、前言O(shè)penMeetings是一個(gè)基于Flash視頻的視頻會(huì)議系統(tǒng),它的后臺(tái)是基于開源的流媒體服務(wù)器RED5做的二次開發(fā),而前臺(tái)實(shí)質(zhì)上是一個(gè)采用OpenLaszlo開發(fā)的Flash。也就是說,OpenMeetings的客戶端必須運(yùn)行在Flash環(huán)境下。因此,我們不妨把PC機(jī)上的FlashPlayer看作是一個(gè)OS(操作系統(tǒng)),而把OpenMeetings的前臺(tái)(swf文件)當(dāng)作該操作系統(tǒng)下的一個(gè)可執(zhí)行程序。這樣的思路下,我們就可以理解,就如我們?cè)赪indows下開發(fā)依賴于硬件的應(yīng)用程序時(shí)必須要借助WINDOWSAPI的支持一樣,OpenMeetings的客戶端也極度依賴Flash環(huán)境所能提供的功能和性能,尤其是和音頻視頻相關(guān)的地方。
二、OpenMeetings流媒體采集和編碼Flash視頻的客戶端采集視頻和音頻信號(hào)后由Flash插件完成音視頻編碼,編碼算法是封閉的,據(jù)說采用的編碼協(xié)議是(視頻編碼為),應(yīng)用開發(fā)者無法優(yōu)化這一塊。OpenMeetings調(diào)用攝像頭時(shí)并創(chuàng)建一個(gè)廣播流時(shí),我們來看看Flash做了哪些動(dòng)作:
捕獲攝像頭信號(hào)
進(jìn)行視頻壓縮編碼
創(chuàng)建一個(gè)基于RTMP協(xié)議的流與RED5建立連接
將經(jīng)過視頻壓縮編碼后的數(shù)據(jù)按照RTMP協(xié)議進(jìn)行信道編碼
將信道編碼后的數(shù)據(jù)放入流中
我們可以發(fā)現(xiàn),F(xiàn)lash自動(dòng)幫我們完成了大部分的工作,所以開發(fā)基于Flash的流媒體應(yīng)用是一件相當(dāng)輕松愉快的事情。然而,事物總是具備兩面性的,F(xiàn)lash的封閉性使我們無從著手改進(jìn)音視頻的壓縮編碼算法,更談不上改進(jìn)RTMP協(xié)議傳輸協(xié)議。能改善性能的地方都被牢牢地封閉在黑箱子里,就好比我們要參加汽車節(jié)油比賽時(shí),卻發(fā)現(xiàn)手里只有一輛純自動(dòng)檔的汽車,讓你空有一身車技卻無用武之地時(shí),郁悶更是無與倫比。
三、OpenMeetings公網(wǎng)上應(yīng)用的帶寬瓶頸在國(guó)內(nèi),大多數(shù)家庭用戶和中小型企業(yè)接入都采用ADSL線路。我們知道,ADSL是一種不對(duì)稱線路,即下行帶寬大,而上行帶寬很小,大約只占下行帶寬的四分之一。512K的ADSL線路,上行帶寬大約為128Kbit,即不到20KB的碼流。OpenMeetings默認(rèn)用戶視頻設(shè)置參數(shù)為30幀/秒(FPS)、分辨率為320*240、質(zhì)量為90,要求穩(wěn)定的上傳帶寬為50KB左右,如果再加上10Kb~20Kb的音頻信號(hào),就要求在50KB~70KB的上行碼流才能無損地向其它用戶廣播。
Flash對(duì)于音頻采集和編碼的效率也很一般,采樣速率為22K時(shí),其音頻壓縮編碼后的碼流速率一般為10KB;采用默認(rèn)采樣率為44K時(shí),碼流速率為16KB左右。也就是說,512K的ADSL線路僅能保障較高質(zhì)量的音頻要求。
兩者的差距巨大,因此,如果按照OpenMeetings的默認(rèn)設(shè)置部署在公網(wǎng)上,很多用戶會(huì)感覺到別人的視頻或音頻非???,不流暢。其實(shí)這大多數(shù)情況不是你網(wǎng)絡(luò)接收的問題,而是視頻發(fā)布者的上行帶寬不能適應(yīng)系統(tǒng)的要求。我們知道,在網(wǎng)絡(luò)上,流媒體數(shù)據(jù)一般是采用UDP協(xié)議來傳輸?shù)?,UDP協(xié)議比TCP的開銷小,但更容易丟幀,其接受的數(shù)據(jù)包也不是順序的,一旦由于帶寬的問題導(dǎo)致客戶端很長(zhǎng)時(shí)間無法收全一個(gè)視頻基幀數(shù)據(jù),那么視頻就會(huì)停頓,俗話叫卡死。
這樣的性能在國(guó)內(nèi)極其不穩(wěn)定的網(wǎng)絡(luò)條件下實(shí)在是差強(qiáng)人意,同時(shí),前文也提到,我們無法去動(dòng)它的編碼算法,那么為了使OpenMeetings能適應(yīng)國(guó)內(nèi)大多數(shù)的512kadsl撥號(hào)上網(wǎng)線路,我們只能在音頻視頻的設(shè)置上下功夫,在保證音頻和視頻的質(zhì)量勉強(qiáng)可以讓人接受的前提下,來建立一個(gè)較為流暢的系統(tǒng)。
四、優(yōu)化視頻和音頻參數(shù)以適應(yīng)網(wǎng)絡(luò)環(huán)境OpenMeetings音視頻信號(hào)采集和壓縮編碼相關(guān)的參數(shù)信號(hào)都可以在它的系統(tǒng)配置文件中找到,其中音視頻相關(guān)的部分如下:
<!--CameraSettingsfortheFramesPerSecond
fps:Number[optional]-Therequestedrateatwhichthecamerashouldcapture
data,inframespersecond.Thedefaultvalueis15.
-->
<framesPerSecond>30</framesPerSecond>
<!--CameraSettingsfortheBandwidth:
bandwidth:Number[optional]-Anintegerthatspecifiesthemaximumamount
ofbandwidththatthecurrentoutgoingvideofeedcanuse,inbytespersecond.
TospecifythatFlashvideocanuseasmuchbandwidthasneededtomaintain
thevalueofframeQuality,pass0forbandwidth.Thedefaultvalueis16384.
--><!--ThesearethesettingsfortheQuality-Modus*normal*
TheQuality-ModuscanbechosenintheLogin-Box--><bandwidthNeededNormal>16384</bandwidthNeededNormal>
<!--ThesearethesettingsfortheQuality-Modus*best*-->
<bandwidthNeededBest>49152</bandwidthNeededBest>
<!--CameraSettingsfortheQuality
quality:Number[optional]-Anintegerthatspecifiestherequiredlevelof
picturequality,asdeterminedbytheamountofcompressionbeingappliedto
eachvideoframe.Acceptablevaluesrangefrom1(lowestquality,maximum
compression)to100(highestquality,nocompression).Tospecifythatpicture
qualitycanvaryasneededtoavoidexceedingbandwidth,pass0forquality.
Thedefaultvalueis0.
--><!--ThesearethesettingsfortheQuality-Modus*normal*-->
<camQualityNormal>85</camQualityNormal>
<!--ThesearethesettingsfortheQuality-Modus*best*-->
<camQualityBest>90</camQualityBest>
<!--MicrophoneSettingsfortheRate:
rate:Number-
Therateatwhichthemicrophoneshouldcapturesound,inkHz.
Acceptablevaluesare5,8,11,22,and44.
Thedefaultvalueis8kHzifyoursoundcapture
devicesupportsthisvalue.Otherwise,thedefaultvalue
isthenextavailablecapturelevelabove8kHzthatyoursound
capturedevicesupports,usually11kHz.
--><!--Quality-Modus*normal*--><microphoneRateNormal>22</microphoneRateNormal><!--MicrophoneSettingsQuality-Modus*best*-->
<microphoneRateBest>44</microphoneRateBest>
framesPerSecond:視頻信號(hào)每秒的幀數(shù),F(xiàn)PS
bandwidth:帶寬要求(單路視頻的帶寬)
camQuality:每個(gè)視頻幀信號(hào)壓縮后的質(zhì)量,無壓縮的視頻質(zhì)量為100%microphoneRate:麥克音頻信號(hào)的采樣率
在OpenMeetings中,我們必須根據(jù)用戶的線路特點(diǎn)來設(shè)計(jì)默認(rèn)的音頻視頻參數(shù),才能使大多數(shù)用戶能在一個(gè)相對(duì)流暢的條件下參與視頻會(huì)議,前文已經(jīng)大致介紹了視頻分辨率、音頻采用率、FPS與數(shù)據(jù)碼流的關(guān)系,下面我們列出幾個(gè)典型配置所需的帶寬(經(jīng)驗(yàn)值):
視頻分辨率320*240,音頻采用率44k,F(xiàn)PS30,帶寬56KB+16KB
視頻分辨率240*180,音頻采用率22k,F(xiàn)PS15,帶寬32KB+10KB
視頻分辨率160*120,音頻采用率22k,F(xiàn)PS5,帶寬16KB+10KB
如果我們采用的設(shè)置與實(shí)際線路的上行帶寬不一致,會(huì)出現(xiàn)什么情況呢?我們分析的結(jié)果以及實(shí)際測(cè)試的結(jié)果是一致的,即延時(shí)會(huì)越來越長(zhǎng),直到超過了緩沖,然后直接出現(xiàn)大跨度的跳幀,然后又開始延時(shí),周而復(fù)始。
在做二次開發(fā)的時(shí)候,我們嘗試著將默認(rèn)的FPS參數(shù)改為5,并且在客戶端讓客戶可以根據(jù)自己的線路狀況調(diào)節(jié)。將默認(rèn)的視頻分辨率設(shè)置為240*180,同時(shí)提供320*240和160*120高低兩種選擇;另外,將音頻采樣率默認(rèn)為22K,同時(shí)提供44K和11K兩種選擇。
經(jīng)過這樣的改造后,基本可以滿足各種線路的接入帶寬要求。即使最差的512KADSL線路,選用最低的設(shè)置也能和其它線路的用戶比較流暢地視頻和音頻交互。五、OpenMeetings的延時(shí)和RED5緩存
上一節(jié)提到,OpenMeetings的延時(shí)主要是音視頻質(zhì)量與帶寬不匹配或者線路質(zhì)量原因引起的。同時(shí),它也和RED5的緩存設(shè)置存在一定的聯(lián)系。我們知道,RED5緩存的設(shè)置有助于改善視頻和音頻質(zhì)量,比如設(shè)置一定的接收緩存,可以將客戶端上行的UDP數(shù)據(jù)包更好地組裝,最終使得轉(zhuǎn)發(fā)的數(shù)據(jù)更完整。但緩存過大,在網(wǎng)絡(luò)接入狀態(tài)不穩(wěn)定的時(shí)候,會(huì)使系統(tǒng)延時(shí)逐漸增加,最好因?yàn)椴煌蛻舳说耐皆蚨坏貌粊G棄部分?jǐn)?shù)據(jù),直接造成跳幀。因此,我們的建議是,根據(jù)部署的環(huán)境及大部分用戶的接入線路來設(shè)置RED5的緩存。如果我們部署在較好的網(wǎng)絡(luò)環(huán)境下,如局域網(wǎng),或者用戶的接入線路大部分都是光纖線路,我們可以設(shè)置比較小的緩存,以避免延時(shí)造成的困惑。而在線路狀況不佳的情況、音頻視頻丟幀或失真比較嚴(yán)重,不妨設(shè)置比較大的緩存,以改善質(zhì)量。
RED5的緩存參數(shù)設(shè)置文件:/red5/conf/red5.properties。紅色字體部分時(shí)相關(guān)的緩存設(shè)置參數(shù)。
#RTMP
rtmp.host=
rtmp.port=1935
rtmp.event_threads_core=16
rtmp.event_threads_max=64
#eventthreadsqueue:-1unbounded,0direct(noqueue),nboundedqueue
rtmp.event_threads_queue=0
rtmp.event_threads_keepalive=60
rtmp.send_buffer_size=200rtmp.receive_buffer_size=200rtmp.ping_interval=5000
rtmp.max_inactivity=60000
rtmp.tcp_nodelay=true
六、OpenMeetings對(duì)虛擬視頻MvBox的支持問題
Flash對(duì)虛擬視頻MvBox的支持有點(diǎn)Bug,這個(gè)問題主要出現(xiàn)在FireFox中,很容易引起整個(gè)Flash的崩潰。經(jīng)過多次試驗(yàn),發(fā)現(xiàn)FlashForFireFox的版本只有在視頻分辨率設(shè)置寬高比為4:3時(shí)才不會(huì)引起崩潰。
七、后記與當(dāng)前C/S架構(gòu)下的視頻會(huì)議普遍采用或者M(jìn)PEG4編碼的情況相比,F(xiàn)lash對(duì)Webcam視頻的編解碼已大大落后了,從帶寬和畫質(zhì)目前都無法和C/S架構(gòu)相比。當(dāng)然,從發(fā)展的角度來講,F(xiàn)MS和RED5都已經(jīng)相繼開始支持編碼,Adobe也推出了自己的支持的編碼器可用于和FMS或RED5配合實(shí)現(xiàn)高質(zhì)量的直播,看來在視頻會(huì)議的webcam采集和編碼上將來也應(yīng)該會(huì)支持,這將會(huì)給OpenMeetings真正在公網(wǎng)上進(jìn)入實(shí)用階段打下堅(jiān)實(shí)的基礎(chǔ),但愿這個(gè)將來不會(huì)太遙遠(yuǎn)。使用SOAP網(wǎng)關(guān)實(shí)現(xiàn)OpenMeetings與其它系統(tǒng)的整合HYPERLINKOpenMeetings2010-09-2710:28:49閱讀216評(píng)論2
字號(hào):大中小
訂閱作者:老貓一、概述
非常遺憾的是,OpenMeetings沒有提供基于第三方SSO(單點(diǎn)登錄,例如CAS)系統(tǒng)的集成方法。但它提供了一個(gè)WebService,官網(wǎng)將其命名為SOAP-Gateway,亦即一個(gè)基于SOAP的網(wǎng)關(guān)。這個(gè)Gateway集成了一系列的方法,可以實(shí)現(xiàn)從OpenMeetings的Flash客戶端(前臺(tái))之外完成登錄、進(jìn)入房間、以及部分后臺(tái)管理(如添加房間、注冊(cè)新用戶等)功能。
調(diào)用SOAP-Gateway的前提是你必須知道一個(gè)OpenMeetings管理員的登錄名和密碼。對(duì)于調(diào)用該WebService來進(jìn)行平臺(tái)管理的應(yīng)用,這看起來是合理的;但對(duì)于那些只是需要讓一個(gè)游客直接
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年年七年級(jí)數(shù)學(xué)人教版下冊(cè)專題整合復(fù)習(xí)卷28.1~28.2 階段性復(fù)習(xí)(含答案)-
- 持續(xù)反饋環(huán)節(jié)在生產(chǎn)計(jì)劃中的必要性
- 巖石礦物標(biāo)準(zhǔn)物質(zhì)相關(guān)行業(yè)投資方案
- 水泥運(yùn)輸委托協(xié)議三篇
- 冷箱行業(yè)相關(guān)投資計(jì)劃提議
- 工程塑料尼龍系列相關(guān)行業(yè)投資規(guī)劃報(bào)告范本
- 再生資源倉(cāng)庫(kù)管理方案計(jì)劃
- 跨部門合作的工作流程計(jì)劃
- 睡眠健康借款合同三篇
- 【培訓(xùn)課件】績(jī)效考評(píng)和員工能力發(fā)展項(xiàng)目建議書
- 中央空調(diào)維保工作實(shí)施方案
- (高清版)外墻外保溫工程技術(shù)標(biāo)準(zhǔn)JGJ144-2019
- 初中生物教學(xué)儀器配備明細(xì)目錄
- 未成年人需辦銀行卡證明(模板)
- 慣性導(dǎo)航系統(tǒng)誤差傳播特性分析報(bào)告
- 信息化弱電項(xiàng)目試運(yùn)行方案報(bào)告
- 算法導(dǎo)論第三十四章答案
- 輻流式沉淀池的計(jì)算
- 不自主運(yùn)動(dòng)量表(AIMS)(共3頁(yè))
- 二戰(zhàn)(英語)PPT
- 探究性學(xué)習(xí)實(shí)踐之我見文檔
評(píng)論
0/150
提交評(píng)論