NetStream对象--FlashCom Develop阅读笔记 (十二)

2006-03-09 00:42:35

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 : 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, -1); 5 : 6 : my_ns.Fun = function(str) { //Fun is the handler name 7 : trace (str); 8 : } 关闭视频流的几种方法: 1 : myStream_ns.publish(false);// 停止整个串流 2 : myStream_ns.close();//关闭串流,当然也就停止了串流播放 3 : mystream_ns.attachVideo(null);//仅仅停止视频播放,仍然保持音频播放.