Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   HSlider и VideoDisplay (http://www.flasher.ru/forum/showthread.php?t=177595)

stryker 03.04.2012 22:45

HSlider и VideoDisplay
 
Всем привет.
Есть VideoDisplay, в котором проигрывается видео.
и есть HSlider - прогрессбар для этого видео.

Проблема в том, что при событии drag/drop слайдера, ползунок слайдера сначала становится в указанную мной позицию времени (например, 37-ю секунду), но потом почему-то немного перепрыгивает вперед (к примеру, на 38.5 секунду) и только потом обновляется кадр на видео в VideoDisplay.

Помогите разобраться, что не так в коде:

Код AS3:

 
private function slider_thumbPress():void {
        videoDisplay.pause();
}
 
 
 
private function slider_thumbRelease():void {
        videoDisplay.playheadTime = slider.value;
}
 
 
private function videoDisplay_playheadUpdate():void {
 
        slider.value = videoDisplay.playheadTime;
}



Заранее спасибо

djyamato 04.04.2012 05:06

Может проще взять http://help.adobe.com/ru_RU/AS3LCR/F.../ScrubBar.html ?

Genzo 04.04.2012 11:57

Код AS3:

<s:HSlider id="timeSlider" x="30" y="1" width="308
                                  change="dispatchEvent(new TimelineEvent(TimelineEvent.ACTION_TIME_CHANGED , timeSlider.value))"
                                  changeEnd="_slideChanging=false" changeStart="_slideChanging = true"
                                  chromeColor="#86B801" enabled="false" liveDragging="false" maximum="100"
                                  showDataTip="false" snapInterval="1"/>
 
 
public function setProgress(value:Number):void
                        {
                                if(!_slideChanging){
                                        timeSlider.value = value;
                                }                               
                        }


stryker 04.04.2012 17:56

Спасибо за предложения.
Genzo,
Откуда вызывается метод setProgress ?

И еще: у меня FlashBuilder 4.0 и нет возможности установить более позднюю версию, поэтому TimelineEvent моему sdk (4.0) не известен


Не могли бы вы предоставить более развернутый пример кода?


Огромное спасибо :)

Genzo 04.04.2012 18:06

Извиняюсь, я просто копипастил свой код, TimelineEvent мой класс, тут принцип такой : класс Timeline наследуется от Group и в нем вся логика управления плеером (плей,пауза,громкость,время и т.п.)

Код AS3:

<s:HSlider id="slider"
                                  change="onChange()"
                                  changeEnd="_slideChanging=false"
                                  changeStart="_slideChanging=true"
/>
 
 //Script :
 
 private var _slideChanging:Boolean;
 
 private function onChange():void
 {
        videoDisplay.playheadTime = slider.value ;
 }
 
private function videoDisplay_playheadUpdate():void {
 if(!_slideChanging){
        slider.value = videoDisplay.playheadTime;
 }
 
}


stryker 04.04.2012 20:05

Dct равно прыгает

Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                          xmlns:s="library://ns.adobe.com/flex/spark"
                          xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
 
        <fx:Script>
                <![CDATA[
                        private var _slideChanging:Boolean;
                        private function onChange():void
                        {
                                videoDisplay.playheadTime = slider.value ;
                        }
 
                        private function videoDisplay_playheadUpdate():void {
                                if(!_slideChanging){
                                        slider.value = videoDisplay.playheadTime;
                                }
 
                        }
 
                        protected function videoDisplay_clickHandler(event:MouseEvent):void
                        {
                                // TODO Auto-generated method stub
                                videoDisplay.pause();
                        }
 
                ]]>
        </fx:Script>
 
        <fx:Declarations>
                <!-- Place non-visual elements (e.g., services, value objects) here -->
        </fx:Declarations>
        <mx:VideoDisplay id="videoDisplay" visible="true" width="400" height="250"
                                        playheadUpdate="videoDisplay_playheadUpdate()"
                                        autoBandWidthDetection="true"
                                        click="videoDisplay_clickHandler(event)"
                                        source="http://192.168.1.120/taggingcontrol/video/abc.flv"/>
        <s:HSlider id="slider" x="30" y="1" width="308
                          change="onChange()"
                          changeEnd="_slideChanging=false" changeStart="_slideChanging = true"
                          snapInterval="3"
                          liveDragging="false" maximum="100"/>
</s:Application>


Genzo 05.04.2012 11:16

От этого не избавиться, у вас в видео файле так расставлены ключевые кадры

stryker 05.04.2012 15:50

Genzo,
Это точно так?
Есть ли где-то описание этого?
Может, на официальном сайте?

Genzo 05.04.2012 16:04

Попробуйте открыть VLC или другим проигрователем этот файл и посмотрите как там мотается

stryker 05.04.2012 18:06

да, действительно, в VLC и в MediaPlayer Classic все так же, как и во флеше.

Спасибо за подсказку. ;)


Часовой пояс GMT +4, время: 11:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.