FLEX 3
有关视频加载处理
1
简单介绍下加载视频的步骤:
1.
创建一个
NetConnection
对象,它的作用是连接到远程服务器,调用命令,播放视频
2.
创建一个
NetStream
对象,它的作用是通过
netconnection
对象提供的连接,打开
FLASH player
与服务器的单向流连接
3.
创建一个
Video
对象,直接显示视频
具体的一个例子如下:
1.
在
FLEX BUILD
里新建一个工程,命名为没有myvideo
2.
输入以下代码
package
{
import
flash.display.Sprite;
import
flash.events.AsyncErrorEvent;
import
flash.media.Video;
import
flash.net.NetConnection;
import
flash.net.NetStream;
public
class
myvideo
extends
Sprite
{
public
function
myvideo()
{
var
nc:NetConnection =
new
NetConnection();
nc.connect(
null
);
var
ns:NetStream =
new
NetStream(nc);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncErrorHandle);
ns.play(
"1.flv"
);
var
vd:Video =
new
Video();
vd.attachNetStream(ns);
this
.addChild(vd);
}
private
function
asyncErrorHandle(e:AsyncErrorEvent):
void
{
trace
(
"Error!"
);
}
}
}
以上是
我按照书上说的做了个加载本地视频文件的类,结果报了个错,如下图:
2.
后来上网查了查,说要导入一个
CUSTOM
的类,但是我也不知道上哪找去,后来一想在
FLASH CS 3
里测试结果如何呢?我在
FLASH CS 3
里做了如下的测试
3.
首先建立一个
myvideo
的类文件,如下图:
然后建立一个
myvideo
的
FLA
文件并关联刚才的类文件如下图:
按下
ctrl + Enter
测试能正常加载视频文件,但是也报错了,说明是加载异常。如下图
后来想了想,应该添加上回调函数,按照书上后面讲的回调函数的写法,为
ns
添加了个回调函数,代码
var
customClient:Object =
new
Object();
customClient.onMetaData = metadataHandle ;
定义回调函数对象
添加到
ns
对象上
ns.client = customClient ;
分别在
FLEX 3
和
Flash CS 3
再测试,结果如下所示:
OK ,
已经不再报错了。
总结:报错的原因没有定义回调函数,这是书中的一个小的错误,建议广大读者注意!我的参考书是《完全手册
FLASH /FLEX 3 ACTION SCRIPT 3.0
交互式开发详解》
修改后的完整代码如下:
package
{
import
flash.display.Sprite;
import
flash.events.AsyncErrorEvent;
import
flash.media.Video;
import
flash.net.NetConnection;
import
flash.net.NetStream;
public
class
myvideo
extends
Sprite
{
public
function
myvideo()
{
//
创建连接对象
var
nc:NetConnection =
new
NetConnection();
nc.connect(
null
);
//
定义处理
onMetaData
回调函数的对象,如果不定义会出错,下面会详细讲解
var
customClient:Object =
new
Object();
customClient.onMetaData = metadataHandle ;
//
创建
Stream
对象
var
ns:NetStream =
new
NetStream(nc);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncErrorHandle);
ns.client = customClient ;
ns.play(
"1.flv"
); //
调用本地(或服务器)的视频文件
//
创建
Video
对象
var
vd:Video =
new
Video();
vd.attachNetStream(ns);
this
.addChild(vd);
}
//
加载异常处理
private
function
asyncErrorHandle(e:AsyncErrorEvent):
void
{
trace
(
"Error!"
);
}
//
回调函数处理
private
function
metadataHandle(metadata:Object):
void
{
trace
(metadata.width);
}
}
}