openMeetings二次開發(fā)高手的七篇文章_第1頁(yè)
openMeetings二次開發(fā)高手的七篇文章_第2頁(yè)
openMeetings二次開發(fā)高手的七篇文章_第3頁(yè)
openMeetings二次開發(fā)高手的七篇文章_第4頁(yè)
openMeetings二次開發(fā)高手的七篇文章_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論