采用ActionScript3.0脚本实现flv视频的播放,需要用一系列类的协作:
你需要一个NetStream对象来加载视频和控制视频的播放;
然而NetStream类只处理流动数据,它并不处理数据的显示,因此需要一个Video对象使用NetStream数据在屏幕上显示视频。
NetStream类的构造函数需要一个NetConnection对象作为参数,该对象决定视频数据的来源,如果Flash Video来自一个Flash Communication Server或Flash Media Server,则NetConnection对象要指向对应的服务器。但是,如果是边下载边播放,那么用一个null连接字符串即可。
创建连接对象:
videoConnection.connect( null );
创建数据流管理对象:
创建video对象并显示:
addChild(video);
关联数据流:
video.attachNetStream(videoStream);
开始播放:
videoStream.play("example.flv");
调整音量:
用NetStream对象的soundTransform属性来调整音量;
播放时间:
用NetStream对象的time属性来获取视频已经播放的时间,从开始播放开始经过的时间,以秒为单位,并且该属性是只读的,不能修改。
读取视频时长:
在NetStream中不提供直接的时长属性,而在flv文件的文件中有duration数据段提供时长信息。在NetStream对象加载flv文件时会自动调用onMetaData()方法,然后一般在onMetaData方法中读取flv文件中的相关信息。下面代码用trace语句在调试窗口输出时长信息。
控制播放点:
用NetStream对象的seek()方法,根据提供的参数定位视频的播放位置,但是在实时下载过程中设置的参数不能超过缓冲的数据长度。
缩放视频:
Video对象的videoWidth和videoHeight是只读属性,返回当前视频的显示大小,要修改其大小可以通过改变Video对象的width和height属性来实现。
设置缓冲:
用NetStream对象的bufferTime属性来设置视频播放前应该缓冲的视频长度,即必须在缓冲够bufferTime的数据后才会开始播放。如果不设置,则默认设置为0.1s。bufferLength是NetStream的一个只读属性,返回已经缓冲的数据长度,因此用bufferLenght/bufferTime来显示已经缓冲的比率。NetStream对象的bytesLoaded和bytesTotal属性来显示视频文件已经下载的总长。
添加滤镜效果:
用Video对象的filters属性来设置视频的显示效果。
暂停:
用NetStream对象的pause()函数来暂停播放。
停止:
用NetStream对象的close()函数来停止播放,默认会清楚缓存,如果要再次播放就要再次下载,然而如果浏览器缓存有数据则可能播放的是浏览器缓存的内容,如果要重新下载播放可以采用如下方法:
videoStream.play("video.flv?uniqueIndex=" + (new Date( )).getTime( ));
清除显示:
当你关闭一个NetStream对象时,video对象并不会自动清除屏幕显示而会一直保留最后一帧图像,只有在删除Video对象或调用Video对象的clear()方法后才会清除屏幕。
var client:Object = new Object( ); client.onMetaData = function(metadata:Object):void { trace(metadata.duration); }; videoStream.client = client;