学习 Flash 中的 ActionScript 2.0 |
|
|
|
| 使用图像、声音和视频 > 关于使用 FLV 视频 > 使用提示点 | |||
您可以对 Flash 视频使用几种不同类型的提示点。可以使用 ActionScript 与在创建 FLV 文件时嵌入到 FLV 文件中的提示点进行交互,也可以与用 ActionScript 创建的提示点进行交互。
导航提示点 您可以在编码 FLV 文件时,将导航提示点嵌入到 FLV 流和 FLV 元数据包中。使用导航提示点可以使用户搜索到文件的指定部分。
事件提示点 您可以在编码 FLV 文件时,将事件提示点嵌入到 FLV 流和 FLV 元数据包中。还可以编写代码来处理在 FLV 回放期间于指定点上触发的事件。
ActionScript 提示点 使用 ActionScript 代码创建的外部提示点。您可以编写代码来触发这些与视频回放有关的提示点。这些提示点的精确度要低于嵌入的提示点(最高时相差 1/10 秒),因为视频播放器单独跟踪这些提示点。
由于导航提示点会在指定的提示点位置创建一个关键帧,因此可以使用代码将视频播放器的播放头移动到该位置。您可以在 FLV 文件中设置一些特殊点,让用户搜索这些点。例如,视频可能会具有多个章节或段,在这种情况下您就可以在视频文件中嵌入导航提示点,以此方式来控制视频。
如果您计划创建一个应用程序,希望用户能在其中导航至提示点,则应在编码文件时创建并嵌入提示点,而不应使用 ActionScript 提示点。您应将提示点嵌入到 FLV 文件中,因为这些提示点需要更加精确的处理。有关用提示点编码 FLV 文件的更多信息,请参见"使用 Flash"中的嵌入指令点(仅限 Flash Professional)。
您可以通过编写 ActionScript 来访问提示点参数。提示点参数是用 cuePoint 事件 (event.info.parameters) 接收的事件对象的一部分。
您可以使用 NetStream.onMetaData 跟踪 FLV 文档中嵌入的提示点。需要递归返回的元数据的结构,以查看提示点信息。
下面的代码跟踪 FLV 文件中的提示点:
var connection_nc:NetConnection = new NetConnection();
connection_nc.connect(null);
var stream_ns:NetStream = new NetStream(connection_nc);
stream_ns.onMetaData = function(metaProp:Object) {
trace("The metadata:");
traceMeta(metaProp);
// traceObject(metaProp, 0);
};
my_video.attachVideo(stream_ns);
stream_ns.play("http://www.helpexamples.com/flash/video/cuepoints.flv");
function traceMeta(metaProp:Object):Void {
var p:String;
for (p in metaProp) {
switch (p) {
case "cuePoints" :
trace("cuePoints: ");
//cycles through the cue points
var cuePointArr:Array = metaProp[p];
for (var j:Number = 0; j < cuePointArr.length; j++) {
//cycle through the current cue point parameters
trace("\t cuePoints[" + j + "]:");
var currentCuePoint:Object = metaProp[p][j];
var metaPropPJParams:Object = currentCuePoint.parameters;
trace("\t\t name: " + currentCuePoint.name);
trace("\t\t time: " + currentCuePoint.time);
trace("\t\t type: " + currentCuePoint.type);
if (metaPropPJParams != undefined) {
trace("\t\t parameters:");
traceObject(metaPropPJParams, 4);
}
}
break;
default :
trace(p + ": " + metaProp[p]);
break;
}
}
}
function traceObject(obj:Object, indent:Number):Void {
var indentString:String = "";
for (var j:Number = 0; j < indent; j++) {
indentString += "\t";
}
for (var i:String in obj) {
if (typeof(obj[i]) == "object") {
trace(indentString + " " + i + ": [Object]");
traceObject(obj[i], indent + 1);
} else {
trace(indentString + " " + i + ": " + obj[i]);
}
}
}
显示以下输出:
The metadata:
canSeekToEnd: true
cuePoints:
cuePoints[0]:
name: point1
time: 0.418
type: navigation
parameters:
lights: beginning
cuePoints[1]:
name: point2
time: 7.748
type: navigation
parameters:
lights: middle
cuePoints[2]:
name: point3
time: 16.02
type: navigation
parameters:
lights: end
audiocodecid: 2
audiodelay: 0.038
audiodatarate: 96
videocodecid: 4
framerate: 15
videodatarate: 400
height: 213
width: 320
duration: 16.334
有关通过 FLVPlayback 组件使用提示点的信息,请参见通过 FLVPlayback 组件使用嵌入的提示点(仅限 Flash Professional)。
在使用 FLVPlayback 组件时,可以在属性检查器中查看 FLV 文件的提示点。设置了 FLVPlayback 实例的 contentPath 属性后,便可以查看视频文件中嵌入的任何提示点了。通过使用"参数"选项卡,可以查找 cuePoints 属性,然后单击放大镜图标,查看文件中的提示点列表。
|
注意 |
若要在"参数"选项卡上查看提示点,必须在 contentPath 文本框中键入 FLV 文件的名称,而不是使用代码分配 contentPath。 |
下面的示例演示如何通过 FLVPlayback 组件使用提示点信息。
通过 FLVPlayback 组件使用提示点:
var my_flvPb:mx.video.FLVPlayback;
var my_ta:mx.controls.TextArea;
my_flvPb.contentPath = "http://www.helpexamples.com/flash/video/cuepoints.flv";
var listenerObject:Object = new Object();
listenerObject.cuePoint = function(eventObject:Object) {
my_ta.text += "Elapsed time in seconds: " + my_flvPb.playheadTime + "\n";
};
my_flvPb.addEventListener("cuePoint",listenerObject);
在播放头经过文档中嵌入的每个提示点时,便会在 TextArea 实例中出现已运行时间。
有关使用 FLVPlayback 组件的更多信息,请参见FLVPlayback 组件(仅限 Flash Professional)。
您可以用 ActionScript 创建提示点,然后再结合视频对象实例或一个视频播放器组件(Flash Player 8 的 FLVPlayback 或 Flash Player 7 的 MediaPlayback)使用这些提示点。下面的示例演示如何轻松使用 ActionScript 代码创建提示点并使用脚本访问这些提示点。
|
注意 |
如果打算向应用程序添加导航功能,则可以将导航提示点嵌入到文档中。有关更多信息,请参见使用提示点。有关使用嵌入的提示点的示例,请参见通过 FLVPlayback 组件使用嵌入的提示点(仅限 Flash Professional)。 |
通过 FLVPlayback 组件创建和使用提示点: 该组件位于 FLVPlayback - Player 8 文件夹中。
var my_flvPb:mx.video.FLVPlayback;
my_flvPb.contentPath = "http://www.helpexamples.com/flash/video/clouds.flv";
// 创建 cuePoint 对象。
var cuePt:Object = new Object();
cuePt.time = 1;
cuePt.name = "elapsed_time";
cuePt.type = "actionscript";
// 添加 AS 提示点。
my_flvPb.addASCuePoint(cuePt);
// 添加另一个 AS 提示点。
my_flvPb.addASCuePoint(2, "elapsed_time2");
// 在文本字段中显示提示点信息。
var listenerObject:Object = new Object();
listenerObject.cuePoint = function(eventObject) {
my_ta.text += "Elapsed time in seconds: " + my_flvPb.playheadTime + "\n";
};
my_flvPb.addEventListener("cuePoint",listenerObject);
将在"输出"面板中输出以下提示点:
Elapsed time in seconds: 1.034 Elapsed time in seconds: 2.102
有关 addASCuePoint() 的信息,请参见FLVPlayback.addASCuePoint()。有关使用提示点和 FLVPlayback 组件的信息,请参见使用提示点和FLVPlayback 组件(仅限 Flash Professional)。
下面的示例演示在运行时如何添加提示点,然后在 MediaPlayback 组件中播放 FLV 文件时跟踪提示点。
通过 MediaPlayback 组件创建和使用提示点: 该组件位于 Media - Player 6 - 7 文件夹中。
import mx.controls.MediaPlayback;
var my_mp:MediaPlayback;
my_mp.autoPlay = false;
my_mp.addEventListener("cuePoint", doCuePoint);
my_mp.addCuePoint("one", 1);
my_mp.addCuePoint("two", 2);
my_mp.addCuePoint("three", 3);
my_mp.addCuePoint("four", 4);
function doCuePoint(eventObj:Object):Void {
trace(eventObj.type + " = {cuePointName:" + eventObj.cuePointName + " cuePointTime:" + eventObj.cuePointTime + "}");
}
将在"输出"面板中输出以下提示点:
cuePoint = {cuePointName:one cuePointTime:1}
cuePoint = {cuePointName:two cuePointTime:2}
cuePoint = {cuePointName:three cuePointTime:3}
cuePoint = {cuePointName:four cuePointTime:4}
有关使用 MediaPlayback 组件的更多信息,请参见媒体组件(仅限 Flash Professional)。有关使用 FLVPlayback 组件的更多信息,请参见FLVPlayback 组件(仅限 Flash Professional)。
|
|
|
|