8.14.创建视频播放进度条

8.14.1. 问题
我需要创建一个控制条,使用户能够在视频播放时使用进度条。
8.14.2. 解决办法
创建一个可以拖动的Sprite 对象,并且监听任何它发出的DragEvent 事件。在DragEvent 时间处理中,在Video 对象的视频流,NetStream 设置向前或向后的搜索总数,
8.14.3. 讨论
您可以使用任何可拖动的显示对象在播放的视频中设定新的位置。在这个例子中,NetStream的seek 方法从视频开头起指定秒数的点开始播放。
+展开
-ActionScript
ns.seek((playhead.x/timeline.width) * length);

用户打算搜索视频中制定的秒数时,用拖动Sprite 对象在时间线区域的宽度来分配位置和在视频中的长度。NetStream 会照顾寻找适当的帧,从这一点开始重现播放视频流。
+展开
-ActionScript
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.NetStatusEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import mx.core.UIComponent;
public class Scrubber extends UIComponent
{
private var playhead:Sprite;
private var timeline:Sprite;
private var ns:NetStream;
private var nc:NetConnection;
private var obj:Object = {};
private var length:int;
private var vid:Video;
public function Scrubber () {
super();
playhead = new Sprite();
addChild(playhead);
playhead.graphics.beginFill(0x0000ff, 1);
playhead.graphics.drawCircle(0, 0, 5);
playhead.graphics.endFill();
playhead.addEventListener(MouseEvent.MOUSE_DOWN,
startSeek);
timeline = new Sprite();
timeline.graphics.beginFill(0xcccccc, 1);
timeline.graphics.drawRect(0, 0, 200, 10);
timeline.graphics.endFill();
addChild(timeline);
timeline.addChild(playhead);
playhead.y = 4;
vid = new Video();
addChild(vid);
vid.y = 100;
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS,
netStatus);
nc.connect(null);
}
private function netStatus(event:NetStatusEvent):void {
obj.onMetaData = onMetaData;
ns = new NetStream(nc);
ns.client = obj;
vid.attachNetStream(ns);
ns.play("http://localhost:3001/test.flv");
}
private function onMetaData(obj:Object):void {
length = obj.duration;
trace(length);
}
private function startSeek(mouseEvent:MouseEvent):void {
playhead.startDrag(false, timeline.getBounds(this));
addEventListener(MouseEvent.MOUSE_MOVE, seek);
playhead.addEventListener(MouseEvent.ROLL_OUT, endSeek);
playhead.addEventListener(MouseEvent.MOUSE_UP, endSeek);
}
private function seek(mouseEvent:MouseEvent):void {
ns.seek((playhead.x/timeline.width) * length);
}
private function endSeek(mouseEvent:MouseEvent):void {
removeEventListener(MouseEvent.MOUSE_MOVE, seek);
playhead.stopDrag();
}

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


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