PDA

Просмотр полной версии : HSlider и VideoDisplay


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

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

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



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/Flex_4.0/spark/components/mediaClasses/ScrubBar.html ?

Genzo
04.04.2012, 11:57
<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 и в нем вся логика управления плеером (плей,пауза,громкость,время и т.п.)


<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 равно прыгает

<?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 все так же, как и во флеше.

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

Genzo
05.04.2012, 19:02
Есть програмулина flvtool2, она позволит вам записать ключевые кадры каждую N мс, нужен руби и лучше не win.