用AS3编写的具有将多段视频连起来播放的 flash视频播放器---003

此次通过使用开源的flash视频播放器源码来实现视频连起来的效果,先引用一下该开源项目描述:

f4Player是一个开源的Flash视频播放器,可以播放.fly、.f4v和.mp4等文件。整个播放器只有8kb左右,拥有一个可更换皮肤的界面。支持边播放,边下载和全屏播放。

用AS3编写的具有将多段视频连起来播放的 flash视频播放器---003

它的地址是:这里

下载地址是:这里

最新版本:这里

现在时间已经很晚了,仅仅总结一下视频连接起来播放效果的一个需要计算的地方,算法比较简单,仅仅是个高中生的知识:

画个图总结一下:

用AS3编写的具有将多段视频连起来播放的 flash视频播放器---003

【图1】

首先介绍一下目的:

看图1,用来表示由三段视频组成的整体视频,三段视频的结束的时间位置分别为:L0,L1,L2,而三段视频的时间也就是L0 , L1-L0 , L2-L1,X1是相对于最左边的起始点的位置,而不是相对于第二段视频起始点的位置,当前视频播放到了X2位置,此时我想点击X1使它播放X1相对于第二段视频的位置的视频,怎么办?

由于使用的事件中,

var playingBarEvent:Function = function(e:MouseEvent):void
{
		var point:Number = e.localX * info.playing;
....................
只有e.localX 是用来描述点击的位置,那么先介绍一下它表示的是什么:

e.localX 表示在已经播放的长度为X2的视频中,X1所占的比例,也就是e.localX = X1 / X2。而想要得到相对于整体的X1,对应的相对于第二段视频的起始点位置Y,怎么求?

在Player中有个函数:

private function Info():Object {
	var playing:Number = ( ns.time / duration ).toFixed(2);
	return {
				‘width‘: videoWidth,
				‘height‘: videoHeight,
				‘total‘: ns.bytesTotal,
				‘loaded‘: ns.bytesLoaded,
				‘progress‘: ( ns.bytesLoaded / ns.bytesTotal ).toFixed(2),
				‘duration‘: duration,
				‘time‘: ns.time,
				‘playing‘: ( playing > 1 ? 1 : playing ),
				‘status‘: status
	};
简单点描述是:

playing= ( ns.time / duration );

等价于:playing  = (X2 -  L0 ) /(L1 - L0)

进而得到:

X2 = playing  *(L1 - L0) + L0
而由e.localX = X1 / X2得到:

X1 = e.localX * X2 =  e.localX *( playing  *(L1 - L0) + L0)

本源码中还有个百分比,所以加上后就是:

X1 =  e.localX *( playing  *(L1 - L0) + L0) / 100;

那么

Y = X1 - L0 = e.localX *( playing  *(L1 - L0) + L0) /100- L0

这样想要点击X1点达到点击第二段视频对应点的效果就可以:

var seekpoint:Number = e.localX*(info.playing*videotimes[_videoCurrentIndex]+_videoCurrentStartTime)/100;//**********************
				

控制事件为:

player.Seek(seekpoint);







用AS3编写的具有将多段视频连起来播放的 flash视频播放器---003

上一篇:招聘优秀开发者的7个简单原则


下一篇:支持O(1)时间增加,删除和随机选择操作的数据结构