开源FLV播放器FX Video中的Bug

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. 还未找到原因,有人知道的话,请告诉我,谢谢!

posted on 2009-07-17 12:24 Flexer 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/flexer/archive/2009/07/17/1525521.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值