http://bbs.9ria.com/viewthread.php?tid=67663&extra=page%3D2%26amp%3Borderby%3Ddateline%26amp%3Bfilter%3D172800
FX Video是一个开源的基于Flex的flv播放器,不知道有没有人用过,它扩展自Flex中的标准组件VideoDisplay,即支持HTTP,又支持RTMP。最近在做公司的一个项目时用到了,发现它在用RTMP协议播放时,有几个Bug。
1. 还未设置其source属性时,进度条就已经加载了一段。
2. 基于RTMP协议播放时,本来应该是可以随时拖拽进度条的,它却不能。
3. 基于RTMP协议播放时,它不能通过点击进度条上的位置来播放影片的对应时刻。
通过分析其源代码,我找到了相应的解决方案。
1. 修改component.player.controls包下的FXProgressSlider类,将其私有属性_progress的默认值改为0.0001(只要是一个很小的数就行了,但不能是0,原值是20)。
2. 修改component.player.controls包下的FXSlider类,将其原方法:
private function get boundMax():Number
{
return Math.max(thumb.width/2, bound.width - thumb.width/2) ;
}
改为:
private function get boundMax():Number
{
return Math.max(thumb.width/2, this.unscaledWidth - thumb.width/2) ;
}
改完后,可以拖拽了,但是如果将进度条直接拖拽到最后时,界面会立即卡在拖拽前的那一帧上,很不友好,可以将原方法:
private function onMouseMove(event:MouseEvent):void
{
var ptoint = new Point(event.stageX, event.stageY);
pt = globalToLocal(pt);
thumb.x = Math.min(Math.max(pt.x - xOffset, boundMin), boundMax);
e = new SliderEvent(SliderEvent.THUMB_DRAG);
e.value = value;
dispatchEvent(e);
invalidateDisplayList();
}
改为:
private function onMouseMove(event:MouseEvent):void
{
var ptoint = new Point(event.stageX, event.stageY);
pt = globalToLocal(pt);
thumb.x = Math.min(Math.max(pt.x - xOffset, boundMin), boundMax-0.1); //用boundMax减去一个很小的不等于0的数就行了
e = new SliderEvent(SliderEvent.THUMB_DRAG);
e.value = value;
dispatchEvent(e);
invalidateDisplayList();
}
改完后,把进度条直接拖拽到最后时,影片不会立即停止,还会播放一小会,这一小会有多长就要看你设置的那个很小数的大小了。这样也就解决了影片卡住的问题。