此次通过使用开源的flash视频播放器源码来实现视频连起来的效果,先引用一下该开源项目描述:
f4Player是一个开源的Flash视频播放器,可以播放.fly、.f4v和.mp4等文件。整个播放器只有8kb左右,拥有一个可更换皮肤的界面。支持边播放,边下载和全屏播放。
它的地址是:这里
下载地址是:这里
最新版本:这里
现在时间已经很晚了,仅仅总结一下视频连接起来播放效果的一个需要计算的地方,算法比较简单,仅仅是个高中生的知识:
画个图总结一下:
【图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);