視頻錄制是FCS經(jīng)常會(huì)用到的一個(gè)功能,其中重要的一點(diǎn)是要評(píng)估視頻錄制的帶寬需求來采用合適的尺寸和速率。
其大致的算法是:
視頻寬度 x 視頻高度 x 播放速率 (fps) = 總的帶寬( bits/sec)
但是要注意的是,在使用FCS錄制的時(shí)候,使用的是Bps,而不是kbps,要轉(zhuǎn)換(8 bits =1 byte )
打開比方,使用320×240的視頻窗口以30fps的速率錄制,其帶寬消耗計(jì)算:
1: 320 x 240 x 30 fps = 2.3 Mbps = 288,000 Bps
那么如何根據(jù)自身的帶寬條件進(jìn)行不同的視頻設(shè)置呢,這里有些建議的設(shè)置
1 : //如果使用的是
2 : Camera.setMode(320,240,15);
3 : setKeyFrame(60);
4 : Camera.setQuality(144,000,85 );
5 : Microphone.setRate(22);
6 : //總的消耗帶寬:1,196 kbps
1 : //786 kbps寬帶:
2 : Camera.setMode(240,180,12);
3 : setKeyFrame(48);
4 : Camera.setQuality(64,800,85 );
5 : Microphone.setRate(22);
6 : //總的消耗帶寬:562 kbps
1 : //384 kbps寬帶:
2 : Camera.setMode(192,144,7);
3 : setKeyFrame(28);
4 : Camera.setQuality(24,192,85 );
5 : Microphone.setRate(11);
6 : //總的消耗帶寬:216 kbps
1 : //56 kbps 撥號(hào):
2 : Camera.setMode(80,60,8);
3 : setKeyFrame(32);
4 : Camera.setQuality(4,800,85 );
5 : Microphone.setRate(8);
6 : //總的消耗帶寬:54 kbps
當(dāng)然,你可以通過管理控制臺(tái)(通過streams項(xiàng)中的I/O顯示)來查看你的應(yīng)用程序所消耗的帶寬進(jìn)行靈活的調(diào)試更換。
記得上次有個(gè)朋友提到過這個(gè)問題,今天又有網(wǎng)友問起,所以就寫出來說明下。
一般默認(rèn)Microphone的聲音頻率是8kHz ,如果調(diào)節(jié)更好的聲音品質(zhì),就需要使用setRate方法,如:
1 : myMic.setRate(userRate);
2 : //其中userRate的可能值有: 5, 8, 11, 22或 44。
在FlashCom中的Camera, Microphone, LocalConnection, NetConnection,NetStream和SharedObject對(duì)象都提供了onStatus事件響應(yīng),onstatus事件的返回信息記錄在信息對(duì)象中。為了能夠響應(yīng)這些事件,你必須創(chuàng)建一個(gè)方法來處理信息對(duì)象,而最重要的一點(diǎn)是你必須要清楚不同的信息對(duì)象返回值和返回類型。
信息對(duì)象具有下面的屬性。
code 記錄信息的返回內(nèi)容
level 信息等級(jí)狀態(tài),有status 狀態(tài) warning 警告 error 錯(cuò)誤
下面對(duì)FlashCom中的對(duì)象的onstatus返回值作個(gè)總結(jié)。
Camera信息對(duì)象
Camera.Muted (Status)
用戶拒絕使用camera
Camera.Unmuted (Status)
用戶允許使用camera
LocalConnection信息對(duì)象
none (status)
none (error)
Microphone信息對(duì)象
Microphone.Muted (Status)
用戶拒絕使用microphone.
Microphone.Unmuted (Status)
用戶允許使用microphone.
NetConnect信息對(duì)象
NetConnection.Call.Failed (Error)
NetConnection.call方法調(diào)用服務(wù)器端的方法或命令失敗
NetConnection.Connect.AppShutdown (Error)
服務(wù)器端應(yīng)用程序已經(jīng)關(guān)閉(由于資源耗用過大等原因)或者服務(wù)器已經(jīng)關(guān)閉.
NetConnection.Connect.Closed (Status)
連接中斷
NetConnection.Connect.Failed (Error)
連接失敗
NetConnection.Connect.InvalidApp (Error)
指定的應(yīng)用程序名稱沒有找到
NetConnection.Connect.Rejected (Error)
連接被拒絕
NetConnection.Connect.Success (Status)
連接成功
NetStream 信息對(duì)象
NetStream.Buffer.Empty (Status)
數(shù)據(jù)緩沖區(qū)為空
NetStream.Buffer.Full (Status)
緩沖區(qū)已慢
NetStream.Failed (Error)
傳輸中有錯(cuò)誤發(fā)生
NetStream.Pause.Notify (Status)
播放暫停
NetStream.Play.Failed (Error)
播放出錯(cuò)
NetStream.Play.PublishNotify (Status)
發(fā)布開始,信息已經(jīng)發(fā)送到所有訂閱者
NetStream.Play.Reset (Status)
播放列表重置
NetStream.Play.Start (Status)
播放開始
NetStream.Play.Stop (Status)
播放停止
NetStream.Play.StreamNotFound (Error)
播放的實(shí)時(shí)流或文件不存在
NetStream.Play.UnpublishNotify (Status)
發(fā)布停止,信息已經(jīng)發(fā)送到所有訂閱者
NetStream.Publish.BadName (Error)
發(fā)布的數(shù)據(jù)流已經(jīng)被發(fā)布
NetStream.Publish.Idle (Status)
發(fā)布者閑置過長
NetStream.Publish.Start (Status)
發(fā)布開始
NetStream.Record.Failed (Error)
錄制文件出錯(cuò)
NetStream.Record.NoAccess (Error)
沒有足夠的文件訪問權(quán)限
NetStream.Record.Start (Status)
文件錄制開始
NetStream.Record.Stop (Status)
錄制暫停
NetStream.Seek.Failed (Error)
數(shù)據(jù)流定位出錯(cuò)
NetStream.Seek.Notify (Status)
數(shù)據(jù)搜索定位成功
NetStream.Unpause.Notify (Status)
恢復(fù)播放
NetStream.Unpublish.Success (Status)
停止發(fā)布
ShareObject信息對(duì)象
SharedObject.BadPersistence (Error)
SharedObject.getRemote方法傳遞的參數(shù)不匹配
SharedObject.Flush.Failed Error
寫入失敗
SharedObject.Flush.Success (Status)
寫入成功
SharedObject.UriMismatch (Error)
SharedObject.connect的url參數(shù)和SharedObject.getRemote方法不一致
注意:對(duì)于NetStream、NetConnect和遠(yuǎn)程共享對(duì)象而言,在聯(lián)機(jī)情況下onStatus有更多的返回值,這些返回值將會(huì)在服務(wù)器端信息對(duì)象中介紹,其它對(duì)象無須聯(lián)機(jī)也可以響應(yīng)到返回值。
針對(duì)以上不同的對(duì)象可以指定各自的onstatus方法,Macromedia 在Flash中提供了一個(gè)“超級(jí)”函數(shù)叫做System.onStatus ,如果某個(gè)對(duì)象的onstatus響應(yīng)的level屬性是error,并且沒有指定響應(yīng)操作的時(shí)候,Flash會(huì)觸發(fā)System.onStatus事件。
下面的例子演示了如何創(chuàng)建通用的或者特殊的方法來處理信息對(duì)象:
01 : //創(chuàng)建通用方法
02 : System.onStatus = function (genericError)
03 : {
04 : // 在這里寫上詳細(xì)的處理代碼
05 : trace( 'An error has occurred. Please try again.' );
06 : };
07 : // 創(chuàng)建NetConnection對(duì)象的onstatus響應(yīng)方法
08 : // 如果連接返回的值在響應(yīng)事件中沒有定義,并且是error等級(jí)的話
09 : // System.onStatus 事件會(huì)被響應(yīng)
10 : nConn.onStatus = function (infoObject)
11 : {
12 : if (infoObject.code == 'NetConnection.Connect.Success' )
13 : {
14 : trace( 'Successful connection.' );
15 : }
16 : if (infoObject.code == 'NetConnection.Connect.Failed' )
17 : {
18 : trace( 'Connection failed.' );
19 : }
20 : };
21 : // Attempt to open connection
22 : nConn = new NetConnection();
23 : nConn.connect( 'rtmp://myServer.myDomain.com/myRTMPapp' );
評(píng)論
目前已發(fā)表的評(píng)論有:
1. Liu21st在
請(qǐng)嘗試用
newClient.call("updateRoom",null,roomArray);
2.
感謝分享,謝謝了。
有一個(gè)問題,希望能幫忙看一下。是textChat中room的問題,
目的是可以讓新用戶登陸時(shí)看到已經(jīng)有的房間:
client-side:
/////////////////////////////////////
nc = new NetConnection();
//將userName和新開房間的名稱傳給server
nc.connect("rtmp://ip/myChatTest1/"+_root.newRoom, _root.userName, _root.newRoom);
//共享對(duì)象
users_so = SharedObject.getRemote("users_so", _root.nc.uri, false);
users_so.connect(nc);
/////設(shè)置callBack函數(shù)更新 roomList////////////////
nc.updateRoom = function(arr) {
trace(arr);
for (var i = 0; i<arr.length; i++) {
_root.roomList.addItem(arr[i]);
}
};
////////////////////////////////////
server-side
///////////////////////////////////
application.onAppStart = function(){
application.users_so = SharedObject.get("users_so", false);
roomArray=new Array();
}
application.onConnect = function(newClient, name,room){
application.acceptConnection(newClient);
roomArray.push(room)
newClient.call("updateRoom",roomArray)
//////////////////////////////
在客戶端trace一下 updateRoom ,發(fā)現(xiàn)他執(zhí)行了,但找不到形參arr.
請(qǐng)幫忙看一下,先謝謝了。
通過將流、多路音頻、視頻和實(shí)時(shí)數(shù)據(jù)添加到您的網(wǎng)站和 Rich Internet Applications 中,實(shí)現(xiàn)通信和應(yīng)用的完美結(jié)合。Macromedia Flash Communication Server MX 專為流媒體、豐富媒體消息接發(fā)和實(shí)時(shí)協(xié)作度身打造,為開發(fā)創(chuàng)新的通信功能和將之部署到最廣泛的用戶提供了一個(gè)簡單、強(qiáng)大、開放的環(huán)境。
想想在去年的非典時(shí)期,遠(yuǎn)程辦公、遠(yuǎn)程教學(xué)已經(jīng)成了我們的必需,與視頻相關(guān)的IT產(chǎn)品也就成了人們關(guān)注的焦點(diǎn),視頻會(huì)議成了這一特殊時(shí)期頻率最高的交流方式之一。如何快速建立一個(gè)“網(wǎng)上視頻通信解決方案”,來滿足各行各業(yè),甚至個(gè)人用戶的需求呢?選擇開發(fā)工具最重要。理想的“網(wǎng)上視頻通信解決方案”所涵蓋的功能至少應(yīng)該包括幾個(gè)方面:統(tǒng)一的通信和應(yīng)用程序、強(qiáng)大的交互式功能、提供實(shí)時(shí)流媒體能力、實(shí)現(xiàn)多路及多用戶通信功能、提供實(shí)時(shí)協(xié)作、輕松地開發(fā)豐富通信、與應(yīng)用服務(wù)器無縫集成,等等。引至[E維下載].日前,香港Macromedia公司利用其最新發(fā)布的Macromedia Flash Communication Server MX 1.6 、ColdFusion MX軟件,建立起了一個(gè)串流視頻通信網(wǎng)站,可供香港醫(yī)護(hù)人員與家人及朋友召開在網(wǎng)上多人視像會(huì)議。與此同時(shí),香港浸會(huì)大學(xué)利用最新版本的Flash Communication Server MX來支持整個(gè)網(wǎng)上教室的應(yīng)用,并配合Macromedia MX系列產(chǎn)品,快速部署及開發(fā)線上的演示文檔系統(tǒng),實(shí)現(xiàn)了實(shí)時(shí)網(wǎng)上e-Learning技術(shù)及解決方案的最佳效果。
Macromedia Flash Communication Server MX界面
Macromedia Flash Communication Server MX 1.6具有強(qiáng)大的通信能力,包括流媒體、豐富媒體消息接發(fā)和實(shí)時(shí)協(xié)作。其中,流媒體功能使開發(fā)人員能夠在一個(gè)可自定義的播放器環(huán)境中集成帶有動(dòng)態(tài)圖形的流視頻和音頻,將互聯(lián)網(wǎng)上的多媒體演出提升到一個(gè)全新的境界;通過豐富媒體消息接發(fā)功能(如多路、多用戶視頻和音頻聊天),開發(fā)人員可以將實(shí)時(shí)人性化交互和即時(shí)消息接發(fā)功能添加到網(wǎng)站之中;實(shí)時(shí)協(xié)作功能(包括強(qiáng)大的共享對(duì)象技術(shù))能讓多個(gè)用戶共享實(shí)時(shí)白板和應(yīng)用上下文中的其他實(shí)時(shí)數(shù)據(jù)。
Macromedia Flash Communication Server MX 1.6具有多項(xiàng)先進(jìn)功能,在制作隨選隨播視頻影像、實(shí)時(shí)網(wǎng)上廣播、網(wǎng)上視頻通信以及視頻電郵、制作互動(dòng)性高的影音豐富媒體應(yīng)用程序等方面有顯著的提高。此外,它還集成了流媒體、實(shí)時(shí)協(xié)同工作、多種影音及文字信息技術(shù),為客戶提供多項(xiàng)先進(jìn)功能。其中,新增設(shè)的HTTP Tunneling以及SSL支持,讓服務(wù)器的內(nèi)容資料可以實(shí)時(shí)穿越防火墻及代理服務(wù)器;有了MP3的支持,開發(fā)人員可以將高質(zhì)量的音效以串流方式傳送給用戶。此新版本程序還改善了對(duì)音效的支持。同時(shí),音效與視頻影像的同步性以及實(shí)時(shí)串流處理的延遲(latency)管理也得到大幅改善。
新版軟件還具有虛擬網(wǎng)站服務(wù)器的操作及管理功能。這個(gè)服務(wù)器新設(shè)有對(duì)Red Hat Linux 7.3及以上版本的支持功能。此外,新版本亦大大簡化了臨時(shí)進(jìn)行網(wǎng)站流量增添的操作。
點(diǎn)這里下載-> Macromedia Flash Communication Server MX v1.6
解壓密碼:http://www.9iv.com/
Server 1935
my_date = new Date();
my_file ="mv"+my_date.getTime();
dosave = function() {
myurl="http://www.zjwto.com/rcmv/mv_save.asp?id="+my_file;
trace(myurl);
getURL(myurl,"_self","POST");
}