FCS編程之NetStream對象

來源:互聯網
上載者:User
NetStream對象是在所有聯機對象之間傳遞影音串流。如果你僅僅是為了傳遞文字交談內容,使用共用對象就可以解決,不必要使用這個對象。
該對象的基本屬性有
time 到目前為止,串流資料播放的秒數
bufferTime 緩衝區的最大秒數
currentFps 當前播放影像的速率(每秒畫面格數)
bufferLength 當前緩衝區的資料秒數
liveDelay 即時播放視頻流的間隔
但是當你想知道當前播放的影像的總長度的時候,必須調用伺服器端的方法才可以,因為用戶端的FlashPlayer是無法獲知資料流的總長的。你需要在用戶端寫如下方法:01 : function getInfo()
02 : {
03 : nc.call( 'sendInfo', new MyResultSetName(), myStream);
04 : }
05 : function MyResultSetName()
06 : {
07 : this.onResult = function ( retVal )
08 : {
09 : _root.streamlength = retVal;
10 : };
11 : this.onStatus = function(info)
12 : {
13 : trace ( 'Level:' + info.level + 'Code:' + info.code);
14 : // process error object
15 : };
16 : }

然後在伺服器端的main.asc檔案中的相關事件中寫入:01 : application.onAppStart = function ()
02 : {
03 : trace('::: Application has started :::');
04 : }
05 : application.onConnect = function (client)
06 : {
07 : application.acceptConnection (client);
08 : // Add methods
09 : client.prototype.sendInfo = function (name) {
10 : var slen = Stream.length (name);
11 : trace ( 'slen:' + slen);
12 : return slen;
13 : };
14 : }

相關方法參考:
setBufferTime ( 秒數)
可以設定緩衝區的大小以提高低品質的網路情況
注意:bufferLength大小總是不大於bufferTime

attachVideo ( 影像來源,[ 拍攝模式 ] )
將攝像機對象的影像追加給串流對象,如果影像來源為null,將停止捕捉影像
拍攝模式省略表示捕捉連續的影像;若為0則只拍攝儲存格畫面;大於0,將以此數值為秒數間隔,連續拍攝儲存格影像。

attactAudio ( 聲音來源 )
將麥克風的音源設定給串流對象

publish ( 串流資料名,[ 播出方式 ])
如果串流資料名沒有指定則停止播出
播出方式有live(預設值)即時播出但不儲存;record 播出同時以串流資料名.flv檔案儲存體,路徑為應用程式路徑下面的streams檔案夾;append 播出的同時追加到指定名稱的flv檔案中,如果不存在,則自動建立。

pause()
暫停、開始播放

close ()
停止發布或播放當前所有資料流,把 NetStream.time 屬性設定為 0, 使得其它用戶端可以使用該資料流,該方法當你使用 NetStream.play() 或NetStream.publish() 的時候被隱含調用

play( 串流名稱,起始時間,長度,是否清除前一個串流 )
起始時間預設值為-2 表示flash會先嘗試播放即時影音,否則就播放指定識別名稱的檔案
若為-1 將只播放即時影音 若為0 將只播放指定名稱的錄影內容
長度參數指定影音播放的秒數 預設為-1 表示一直播放至結束 為其它值為播放至指定秒數的內容

receiveVideo(fps)
指定播放串流的速率fps設定為0時,flash將停止播放影像

seek(秒數)
快倒倒錄影檔案倒指定秒數的畫面,如果設為0,則跳轉到開頭
可以使用相對時間來跳轉,如
client_ns.seek(client_ns.time-3)

如果要在傳輸音頻或視頻流的同時,包含文本資料等,也就是說進行資料交換,則可以使用send方法。
可以在用戶端包含下面的actionscript:1 : var my_nc:NetConnection = new NetConnection();
2 : my_nc.connect('rtmp://myServer.myDomain.com/appName/appInstance');
3 : var my_ns:NetStream = new NetStream(my_nc);
4 : my_ns.publish('slav', 'live');
5 : my_ns.send('Fun', 'this is a test'); , -1, -1);
5 :
6 : my_ns.Fun = function(str) { //Fun is the handler name
7 : trace (str);
8 : }

在接收端可以使用下面代碼:1 : var my_nc:NetConnection = new NetConnection();
2 : my_nc.connect('rtmp://myServer.myDomain.com/appName');
3 : my_ns = new NetStream(my_nc);
4 : my_ns.play('slav'

關閉視頻流的幾種方法:1 : myStream_ns.publish(false);// 停止整個串流
2 : myStream_ns.close();//關閉串流,當然也就停止了串流播放
3 : mystream_ns.attachVideo(null);//僅僅停止視頻播放,仍然保持音頻播放

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.