Просмотр полной версии : HSlider и VideoDisplay
Всем привет.
Есть 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 ?
<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;
}
}
Спасибо за предложения.
Genzo,
Откуда вызывается метод setProgress ?
И еще: у меня FlashBuilder 4.0 и нет возможности установить более позднюю версию, поэтому TimelineEvent моему sdk (4.0) не известен
Не могли бы вы предоставить более развернутый пример кода?
Огромное спасибо :)
Извиняюсь, я просто копипастил свой код, 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;
}
}
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,
Это точно так?
Есть ли где-то описание этого?
Может, на официальном сайте?
Попробуйте открыть VLC или другим проигрователем этот файл и посмотрите как там мотается
да, действительно, в VLC и в MediaPlayer Classic все так же, как и во флеше.
Спасибо за подсказку. ;)
Есть програмулина flvtool2, она позволит вам записать ключевые кадры каждую N мс, нужен руби и лучше не win.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.