8.13.处理FLV数据的提示点

8.13.1. 问题
我需要在播放时使用编译在FLV 文件中的提示点。
8.13.2. 解决办法
使用NetStream 类的onCuePoint 事件,创建一个处理方法,当遇到提示点时激活。
8.13.3. 讨论
提示点是插入到一个FLV 文件中的纪录一个视频特定时间的值,包括一个简单的名称或带有一个hash 表值的数据对象。提示点经常在文件开始编译时插入一个FLV 文件,任何值在这里确定。Flex VideoDisplay 对象使用mx.controls.videoclasses.CuePoint manager 类来从提示点检测和读取数据。为进一步了解这些,请考虑例子如何使用flash.media.Video 对象。

当NetConnection 对象已经连接时,NetStream 被实例化,你需要设置一个对象传递任何变化数据和提示点事件的处理方法。
+展开
-ActionScript
var obj:Object = new Object();
obj.onCuePoint = onCuePoint;
obj.onMetaData = onMetaData;
ns.client = obj;

这些需要在NetStream 的play 方法被呼叫之前实现。注意下面的代码,onMetaData 和onCuePoint 事件作为参数被对象接受。
+展开
-ActionScript
import flash.events.NetStatusEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import mx.core.UIComponent;
public class CuePointExample extends UIComponent
{
private var ns:NetStream;
private var nc:NetConnection;
private var obj:Object = {};
private var vid:Video;
public function CuePointExample () {
super();
vid = new Video();
addChild(vid);
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,
netStatusEventHandler);
nc.connect(null);
}
private function
netStatusEventHandler(event:NetStatusEvent):void {
ns = new NetStream(nc);
obj.onCuePoint = onCuePoint;
obj.onMetaData = onMetaData;
ns.client = obj;
ns.play("http://localhost:3001/test2.flv");
vid.attachNetStream(ns);
}
private function onCuePoint(obj:Object):void {
trace(obj.name+" "+obj.time+" "+obj.length+" ");
for each(var o:String in obj.parameters) {
trace(obj[o]+" "+o);
}
}
private function onMetaData(obj:Object):void{
}
}

使用mx.controls.VideoDisplay 相当大程度简化了提示点的工作。当使用CuePointManager 处理CuePointEvent 时,不同于前面的情况下,收到的事件只拥有三个属性: cuePointTime,cuePointName, and cuePointType. 如果你需要从提示点获得更多或不同的信息,你可能要写一个自定义类来返回提示点数据,并设置它为VideoDisplay 对象的cuePointManager 属性。

完整的代码如下:
+展开
-XML
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxmlwidth="400"
height="300">

<mx:Script>
<![CDATA[
import mx.events.CuePointEvent;
private function onCuePoint(event:CuePointEvent):void {
trace(event.cuePointName+" "+event.cuePointTime+
" "+event.cuePointType+" ");
}

]]>
</mx:Script>
<mx:VideoDisplay id="vidcuePoint="onCuePoint(event)"/>
</mx:VBox>

加支付宝好友偷能量挖...


评论(0)网络
阅读(66)喜欢(0)flash/flex/fcs/AIR