7.5.4 加载视频流并播放
当视频初始化时,视频播放方法被调用,并且该方法被放置在应用程序事件的标题中。
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" initialize="init()" creationComplete="startVideo()" >
private function startVideo():void
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,netStatusHandler); //添加播放连接监听事件
nc.connect(null);
}
当连接对象连接成功时,播放视频,上面的nc.connect(null); 表示如果您不使用Flash Media Server,则可以使用null作为参数,从本地文件系统或Web服务器播放视频和MP3文件。
private function netStatusHandler(e:NetStatusEvent):void
{
ns = new NetStream(nc);
metaDataObj.onMetaData = this.onMetaData;
ns.client = metaDataObj;
video.attachNetStream(ns);
//ns.bufferTime = 5;
ns.play(videoUrl);
soundProcess.value = _volume;
soundTrans.volume = _volume
ns.soundTransform = soundTrans;
this.addEventListener(Event.ENTER_FRAME,EnterFrameHandler); //添加播放过程中的监听事件
ns.addEventListener(NetStatusEvent.NET_STATUS,NetStreamStatusHandler);//添加播放完毕(或其它状态)后的监听事件
if(!isAutoPlay) //客户端没有设置为自动播放时的处理
{
ns.pause();
btnPlay.source = playClass;
isPause = true;
}
else
{
btnPlay.source = pauseClass;
isPause = false;
}
}
//获取视频的元数据信息,这里的元数据信息包括视频编码,视频码率,音频编码,音频码率,音视频文件大小,流文件总大小,播放总时间等
private function onMetaData(obj:Object):void
{
totalTime = obj.duration;
fileSize = (obj.filesize/(1024*1024)).toFixed(2).toString()+"MB";//换算成兆字节并保留两位小数
}
说明:
- this.addEventListener(Event.ENTER_FRAME,EnterFrameHandler); 用于监视播放过程中的事件处理,由于播放进度和缓存进度的实时显示以及在什么时间点还需要动态实时渲染给用户,所以当视频进入加载画面时 需要不断实时监控事件。
- ns.addEventListener(NetStatusEvent.NET_STATUS,NetStreamStatusHandler); 用于在视频流播放后监听事件处理。
- onMetaData是一种回调方法,可在客户端加载到视频流中时,异步检索有关媒体的元数据,如总媒体大小,总播放时间,采样率等。