用AS3编写的具有将多段视频连起来播放的 flash视频播放器---003
此次通过使用开源的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 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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |