此次通过使用开源的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);