开源FLV播放器FX Video中的Bug

来源:互联网 发布:基因组数据库有哪些 编辑:程序博客网 时间:2024/05/22 04:47

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 pt:Point = 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 pt:Point = 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();
}

 

改完后,把进度条直接拖拽到最后时,影片不会立即停止,还会播放一小会,这一小会有多长就要看你设置的那个很小数的大小了。这样也就解决了影片卡住的问题。

 

3. 还未找到原因,有人知道的话,请告诉我,谢谢!

原创粉丝点击