/*****************
wgscd (c)2005 ' qq:153964481 e-mail:wgscd@126.com blog:http://blog.youkuaiyun.com/wgsnet
/******************************************
动态播放外部 FLV 文件
您可以在运行时加载 FLV 文件,并在 SWF 文件中播放。可以将这些文件加载到视频对象或诸如 FLVPlayback 之类的组件中。下面的示例演示如何在视频对象中播放名为 clouds.flv 的文件。
在 Flash 文档中回放外部 FLV 文件:
- 创建一个名为 playFLV.fla 的新 Flash 文档。
- 在“库”面板(“窗口”>“库”)中,从“库”弹出菜单中选择“新建视频”。
- 在“视频属性”对话框中,命名视频元件并选择“视频”(受 ActionScript 控制)。
- 单击“确定”以创建一个视频对象。
- 将该视频对象从“库”面板拖到舞台上,以创建视频对象实例。
- 使视频对象在舞台上保持选中状态,在“属性”检查器(“窗口”>“属性”>“属性”)中的“实例名称”文本框中键入 my_video。
- 在时间轴中选择第 1 帧,然后打开“动作”面板(“窗口”>“动作”)。
- 在“动作”面板中键入以下代码:
this.createTextField("status_txt", 999, 0, 0, 100, 100);
status_txt.autoSize = "left";
status_txt.multiline = true;
// 创建一个 NetConnection 对象
var my_nc:NetConnection = new NetConnection();
// 创建一个本地流连接
my_nc.connect(null);
// 创建一个 NetStream 对象并定义一个 onStatus() 函数
var my_ns:NetStream = new NetStream(my_nc);
my_ns.onStatus = function(infoObject:Object):Void {
status_txt.text += "status (" + this.time + " seconds)/n";
status_txt.text += "/t Level: " + infoObject.level + "/n";
status_txt.text += "/t Code: " + infoObject.code + "/n/n";
};
// 将 NetStream 视频输入信号附加到 Video 对象
my_video.attachVideo(my_ns);
// 设置缓冲时间
my_ns.setBufferTime(5);
// 开始播放 FLV 文件
my_ns.play("http://www.helpexamples.com/flash/video/clouds.flv");
- 选择“控制”>“测试影片”来测试该文档。
有关预加载 FLV 文件的信息,请参阅第 507 页上的“预加载 FLV 文件”。有关将 FLV 视频动态加载到组件中的信息,请参阅《组件语言参考》。有关 FLV 文件和服务器、FLV 文件以及在 Macintosh 上本地播放 FLV 文件的信息,请参阅
预加载 FLV 文件
若要跟踪 FLV 文件的下载进度,请使用 NetStream.bytesLoaded
和 NetStream.bytesTotal
属性。若要获取 FLV 文件的总字节数和当前下载的字节数,请使用 NetStream.bytesLoaded
和 NetStream.bytesTotal
属性。
下面的示例使用 bytesLoaded
和 bytesTotal
属性显示将 video1.flv 加载到名为 my_video 的视频对象实例中的进度。将动态创建一个名为 loaded_txt 的文本字段,以便显示有关加载进度的信息。
预加载 FLV 文件:
- 创建一个名为 preloadFLV.fla 的新 FLA 文件。
- 在“库”面板(“窗口”>“库”)中,从“库”弹出菜单中选择“新建视频”。
- 在“视频属性”对话框中,命名视频元件并选择“视频”(受 ActionScript 控制)。
- 单击“确定”以创建一个视频对象。
- 将该视频对象从“库”面板拖到舞台上,以创建视频对象实例。
- 使视频对象在舞台上保持选中状态,在“属性”检查器(“窗口”>“属性”>“属性”)中的“实例名称”文本框中键入 my_video。
- 使视频实例保持选中状态,然后在“属性”检查器的宽度文本框中键入 320,在高度文本框中键入 213。
- 在时间轴中选择第 1 帧,然后打开“动作”面板(“窗口” > “动作”)。
在“动作”面板中键入以下代码:
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
my_video.attachVideo(stream_ns);
stream_ns.play("http://www.helpexamples.com/flash/video/lights_short.flv");
this.createTextField("loaded_txt", this.getNextHighestDepth(), 10, 10, 160, 22);
var loaded_interval:Number = setInterval(checkBytesLoaded, 500, stream_ns);
function checkBytesLoaded(my_ns:NetStream) {
var pctLoaded:Number = Math.round(my_ns.bytesLoaded / my_ns.bytesTotal * 100);
loaded_txt.text = Math.round(my_ns.bytesLoaded / 1000) + " of " + Math.round(my_ns.bytesTotal / 1000) + " KB loaded (" + pctLoaded + "%)";
progressBar_mc.bar_mc._xscale = pctLoaded;
if (pctLoaded >= 100) {
clearInterval(loaded_interval);
}
}
- 选择“控制”>“测试影片”,对代码进行测试。
注意
如果进度条立刻走完,则表明视频被缓存到了硬盘上(可能是早已测试过此示例,也可能在其它过程中早已加载了它)。如果发生这种情况,请将 FLV 文件上载到服务器,然后再加载。
预加载 FLV 文件的另一种途径是使用 NetStream.setBufferTime()
方法。此方法采用单个参数,该参数指示回放开始前 FLV 流缓冲的秒数。有关详细信息,请参阅《ActionScript 2.0 语言参考》中的 setBufferTime(NetStream.setBufferTime 方法)
、getBytesLoaded(MovieClip.getBytesLoaded 方法)
、getBytesTotal(MovieClip.getBytesTotal 方法)
、bytesLoaded(NetStream.bytesLoaded 属性)
、bytesTotal(NetStream.bytesTotal 属性)
和 setInterval 函数
。
例子:
<script language="JavaScript1.2" type="text/javascript">
</script>