预加载 MP3 和 FLV 文件

若要预加载 MP3 和 FLV 文件,可以使用 setInterval() 函数创建“轮询”机制,该机制以预先确定的时间间隔检查为 Sound 或 NetStream 对象加载的字节数。若要跟踪 MP3 文件的下载进度,可以使用 Sound.getBytesLoaded()Sound.getBytesTotal() 方法;若要跟踪 FLV 文件的下载进度,可以使用 NetStream.bytesLoadedNetStream.bytesTotal 属性。

以下代码使用 setInterval() 以预先确定的时间间隔检查为 Sound 或 NetStream 对象加载的字节数。

// 创建一个新的 Sound 对象来播放声音。
var songTrack = new Sound();
// 创建一个跟踪下载进度的轮询函数。
// 这是进行轮询的函数。它检查
// 作为引用传递的 Sound 对象的下载进度。
checkProgress = function (soundObj) {
  var bytesLoaded = soundObj.getBytesLoaded();
  var bytesTotal = soundObj.getBytesTotal();
  var percentLoaded = Math.floor(bytesLoaded/bytesTotal * 100);
  trace("%" + percentLoaded + " loaded.");
}
// 当文件完成加载之后,清除间隔轮询。
songTrack.onLoad = function () {
  clearInterval(poll);
}
// 加载 MP3 流文件并开始调用 checkProgress()
songTrack.loadSound("beethoven.mp3", true);
var poll = setInterval(checkProgress, 1000, songTrack);

您可以使用同类轮询方法预加载外部 FLV 文件。若要获取总字节数和当前为 FLV 文件加载的字节数,请使用 NetStream.bytesLoadedNetStream.bytesTotal 属性。

预加载 FLV 文件的另一种途径是使用 NetStream.setBufferTime() 方法。此方法采用单个参数,该参数指示回放开始前 FLV 流进行下载的秒数。

有关更多信息,请参见 MovieClip.getBytesLoaded()MovieClip.getBytesTotal()NetStream.bytesLoadedNetStream.bytesTotalNetStream.setBufferTime()setInterval()Sound.getBytesLoaded()Sound.getBytesTotal()