ActionScript30 videoWord下载.docx
《ActionScript30 videoWord下载.docx》由会员分享,可在线阅读,更多相关《ActionScript30 videoWord下载.docx(17页珍藏版)》请在冰点文库上搜索。
ns=newNetStream(nc);
ns.client=this;
varvideo:
Video=newVideo();
video.attachNetStream(ns);
ns.play("
demo.flv"
);
stage.addEventListener(MouseEvent.CLICK,onClick);
this.addChild(video);
}
privatefunctiononClick(event:
MouseEvent):
void
vartransform:
SoundTransform=ns.soundTransform;
transform.volume=.2;
ns.soundTransform=transform;
publicfunctiononMetaData(infoObject:
Object):
for(varproName:
StringininfoObject)
trace(proName+"
:
"
+infoObject[proName]);
}
2.获得播放时间(播放头)
使用NetStream对象的time属性,单位为秒。
textField.text=netStream.time+"
seconds"
;
注意其值没有经过四舍五入,也就是说有时候得到数可能诸如5.235,如果需要整数,可使用Math.round(),Math.floor(),或Math.ceil()
time属性是只读的
3.获得视频总时间
使用onMetaData()回调函数读取duration源数据值,单位为秒
NetStream类没有定义一个属性指明视频长度,不过大多数情况,可以从flv文件的元数据获得长度值
当一个NetStream对象载入一个flv文件,它会自动调用onMetaData()回调方法,该回调模型不同于ActionScript3.0API中的一般事件模型,一般情况下我们通过使用addEventListener().对一个事件进行监听,但是元数据事件必须为一个对象定义一个叫onMetaData()方法,然后把这个对象赋值给NetStream对象的client属性。
该方法自动传递一个类型为Object的关联数组,其包含flv文件的元数据信息
varclient:
Object=newObject();
client.onMetaData=onMetaData;
ns.client=client;
privatefunctiononMetaData(data:
trace(data.duration);
4.控制播放时间(播放头位置)
使用NetStream的seek()方法
当使用seek()时,Flash播放器将搜寻最接近于指定位置(从流的开始位置算起的偏移量,以秒为单位)的关键帧。
到达该位置时,流将恢复播放
视频搜寻的确切位置取决于导出视频时的帧频率(fps)设置。
因此,如果以6fps和30fps的帧频率导出同一个视频,并对两个视频对象都使用myStream.seek(15),则这两个视频将搜寻两个不同的位置
如要返回到该流的开始处,请seek(0)
ns.seek(ns.time+15);
5.改变视频的显示尺寸
设置Video对象的width和height属性
Video类定义了两个只读属性:
videoWidth和videoHeight,他们返回视频编码时的尺寸,可以用这两个属性设置Video的width和height值
video.width=video.videoWidth;
video.height=video.videoHeight;
需要注意的是,flv还没下载之前这两个属性是不可用的,因此必须等两个属性可用时才行,可以监听netStatus事件达到目的:
PS:
NetConnection、NetStream对象报告其状态时,将调度NetStatusEvent对象。
只有一种类型的状态事件:
NetStatusEvent.NET_STATUS
importflash.events.NetStatusEvent;
nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
privatefunctiononNetStatus(event:
NetStatusEvent):
if(event.info.code=="
NetConnection.Connect.Success"
)
varns:
NetStream=newNetStream(event.targetasNetConnection);
ns.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
demo2.flv"
if(video.videoWidth>
0&
&
video.width!
=video.videoWidth)
video.width=video.videoWidth;
video.height=video.videoHeight;
6.管理和监视缓冲及下载进度
利用NetStream的以下属性:
bufferTime--缓冲区大小。
可设置(单位为秒),默认为0.1秒
bufferLength--已进入缓冲区的秒数
bufferLength/bufferTime--已缓冲的百分比
bytesLoaded--已下载的字节数
bytesTotal--总字节数
bytesLoaded/bytesTotal--已下载的百分比
importflash.events.Event;
importflash.text.TextField;
importflash.text.TextFieldAutoSize;
privatevartextBox:
TextField;
//Video
ns.bufferTime=5;
//Text
textBox=newTextField();
textBox.autoSize=TextFieldAutoSize.CENTER;
textBox.multiline=true;
textBox.x=100;
textBox.y=250;
this.addChild(textBox);
stage.addEventListener(Event.ENTER_FRAME,onEnterFrame);
privatefunctiononEnterFrame(event:
Event):
textBox.text="
textBox.appendText("
缓冲区大小是:
+ns.bufferTime+"
\n"
已进入缓冲区的秒数:
+ns.bufferLength+"
已缓冲的百分比:
+Math.round((ns.bufferLength/ns.bufferTime)*100)+"
%\n"
已下载的字节数:
+ns.bytesLoaded+"
总字节数:
+ns.bytesTotal+"
已下载的百分比:
+Math.round((ns.bytesLoaded/ns.bytesTotal)*100)+"
7.监听flv的提示点
使用onCuePoint()回调函数
和onMetaData()一样onCuePoint()方法定义为Object,然后赋值给NetStream对象的client属性。
onCuePoint()方法接受一个参数,类型为object,属性有:
name--提示点的名称
time--提示点所在位置的时间
type--无论是"
event"
或"
navigation,"
都由编码时所选择的类型决定
parameters--key/value对组成的关联数组
{
NetStream=newNetStream(nc);
Object=newObject();
client.onCuePoint=onCuePoint;
publicfunctiononCuePoint(cuePoint:
trace(cuePoint.name+"
:
+cuePoint.time);
8.暂停和继续播放视频
使用NetStream对象的pause()和resume()方法
publicclassSample0624extendsSprite
privatevarisPause:
Boolean=false;
publicfunctionSample0624()
Video=newVideo;
if(isPause)
ns.resume();
isPause=false;
else
ns.pause();
isPause=true;
privatefunctiononMetaData(infoObject:
trace(infoObject.duration);
9.停止播放视频
使用NetStream类的close()方法
pause()方法只是暂停播放,flv数据还是在继续下载,如果要完全停止视频下载,必须使用close()方法
当调用close()方法后,FlashPlayer删除内存中的flv数据,要想播放需要重新下载一遍。
但是浏览器可能已经缓存了flv数据,因此第二次播放可能会快一些,但是这可能导致不适最新的数据,如果想每次都是播放最新的数据,可以再url上加上唯一字符串,如下面的代码:
netStream.play("
video.flv?
uniqueIndex="
+(newDate()).getTime());
如果因为数字版权问题不想视频数据被缓存,就不能使用渐进式下载视频,这种情况可使用流播放,例如可使用FlashMediaServer
10.快进或快退播放(滑块控制)
importflash.geom.Rectangle;
privatevartimeLine:
Sprite;
privatevarbar:
privatevarvideoTime:
Number;
privatevarbarIsUp:
Boolean=true;
privatevarbarIsMove:
timeLine=newSprite;
timeLine.graphics.beginFill(0x000000);
timeLine.graphics.drawRect(0,0,200,3);
timeLine.graphics.endFill();
timeLine.x=50;
timeLine.y=250;
this.addChild(timeLine);
bar=newSprite();
bar.graphics.beginFill(0xFFFF00);
bar.graphics.drawRect(0,0,8,15);
bar.graphics.endFill();
bar.y=-6;
bar.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
bar.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
timeLine.addChild(bar);
if(barIsUp)
varp