PDA

Просмотр полной версии : Своя компонента Flex


Anig
10.08.2012, 02:04
Здравствуйте.
Возможно ли создать свою компоненту Flex на основании класса fl.video.VideoPlayer?
Если да, то как, помогите пожалуйста

alatar
10.08.2012, 02:16
Пакет fl поставляется только с Flash Professional. Во флексе есть гораздо более мощный фреймворк OSMF. Также можете сделать свой компонент на основе spark.components.VideoPlayer (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/spark/components/VideoPlayer.html) или просто его скинировать.

Добавлено через 1 минуту
P.S. Я вам уже говорил о нем в предыдущем вашем топике.

Anig
10.08.2012, 02:52
Да, спасибо, но в компоненте spark нет возможности attachNetStream, которая мне очень нужна, и вроде нет playHeadTime и totalTime свойств. Мне надо исходить из уже существующей архитектуры чужого приложения, получать net stream, как-то проигрывать во флекс и отслеживать время, загрузку...

alatar
10.08.2012, 03:05
и вроде нет playHeadTime
currentTime
totalTime свойств.
duration

Anig
10.08.2012, 03:26
Проблема с работой с NetStream самая важная к сожалению

Добавлено через 4 минуты
Если ловить события от NetStream, то можно все наверно организовать. Сатачить его VidoPlayer-у, а сам VideoPlayer addChild-ом добавить на VideoDisplay. Но какие события ловить, которые по сути во время всей загрузки периодически должны поступать. Пробую CuePoint, не реагирует вроде мой NetStream

Добавлено через 36 минут
Вот пробую ловить событие fl.video.VideoProgressEvent ..... Нет реакции в приложении никакой. Но оно же генерируется, если в приложении есть компонента VideoPlayer..

GBee
10.08.2012, 09:01
Для потокового видео (записанное потоковое видео, потоковое видео в реальном времени или видео с разной скоростью передачи) свойством источника является объект DynamicStreamingVideoSource. Если требуется воспроизвести записанный или потоковый видеоролик в реальном времени без поддержки множественной скорости передачи, можно передать URL-адрес строки, указывающий на видеопоток. Однако в этом случае тип streamType будет рассматриваться как any, и пользователь не сможет управлять потоком с такой же эффективностью, как при управлении объектом DynamicStreamingVideoSource.
Не оно?

Anig
10.08.2012, 12:46
Не дошло, добрый человек (
Мне хочется сейчас во Flex (в скриптовой части его mxml файла) отловить событие Progress, которое должен вроде генерировать videoPlayer, посаженный как child VideoDisplay компоненты.
<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>

import fl.video.VideoEvent;
import fl.video.VideoProgressEvent;
...
private var mute : Boolean = false;
public var nc:NetConnection = new NetConnection();
public var vp:fl.video.VideoPlayer=new fl.video.VideoPlayer();
public var ns:NetStream;

private function play():void
{

nc.connect(null);

ns= new NetStream(nc);
ns.play("http://www.helpexamples.com/flash/video/water.flv");
vp.attachNetStream(ns);
vp.height=player.height;
vp.width=player.width;
vp.addEventListener( fl.video.VideoProgressEvent.PROGRESS,progress);
player.addChild(vp);
}
public function progress(event:fl.video.VideoProgressEvent):void
{//do somthing
}
</fx:Script>

<mx:VideoDisplay id="player" width="450" height="300" autoPlay="false"/>
<mx:Button label="Play" click="play()"/>
</s:Application>
Что не так, помогите пожалуйста

Добавлено через 1 час 0 минут
Может надо думать в этом направлении
http://alteromusica.blogspot.com/2009/03/custom-events-in-flex.html
Но не знаю как это применить к моему коду ((

Krusty
10.08.2012, 13:52
Anig
1)CuePoint у вас возникать и не будет, потому что у вас в файле нет никаких CuePoint. Если вам нужны ключевые кадры-то это seekpoint вообще-то.
2) Далее, событие возникает у вас в child-e, а вы пишитесь на родителя. Но это событие не всплывает
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/fl/video/VideoProgressEvent.html

VideoProgressEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, bytesLoaded:uint = 0, bytesTotal:uint = 0, vp:uint = 0)

оттого у вас ничего и не выходит.

Anig
10.08.2012, 14:17
Спасибо за отклик.
Уже сижу почти сутки, страшно не соображаю, а сделать надо сегодня...
Помогите пожалуйста.
Вон код приложен наверху.
Как мне это событие поймать-отослать, кому отослать, или еще какое событие...может другое надо..
Я понимаю, что так писать нельзя в форуме, но уже не соображаю.....

Добавлено через 3 минуты
Пишу как тут
http://alteromusica.blogspot.com/2009/03/custom-events-in-flex.html<mx:VideoDisplay id="player" width="450" height="300" autoPlay="false" myCustomEvent="onMyCustomEvent(event);" >
<mx:Metadata>
[Event(name="myCustomEvent", type="fl.video.VideoProgressEvent")]
</mx:Metadata>
</mx:VideoDisplay>
Получаю
<mx:Metadata> is not allowed here
Cannot resolve attribute 'myCustomEvent' for component type mx.controls.VideoDisplay

Добавлено через 18 минут
Уважаемый Krusty
Далее, событие возникает у вас в child-e, а вы пишитесь на родителя. Но это событие не всплывает

Можно тут поподробнее?
Где возникает это событие прогресс, как и на ком мне его отловить?

Krusty
10.08.2012, 14:37
Вернитесь к старому варианту
ns.addEventListener( fl.video.VideoProgressEvent.PROGRESS,progress);
public function progress(event:fl.video.VideoProgressEvent):void
{
trace("VideoProgressEvent yeahhhh");
}

вот это добавьте-событие ловится?

Anig
10.08.2012, 14:49
сейчас попробую, спасибо большое, хотя по-моему и это перепробовано....
И еще, добрый человек, у меня этот trace во FlexBuildere нигде не отображается, что очень отладке мешает.
Как мне за trace следить, простите за тупейший вопрос (((

Krusty
10.08.2012, 14:49
еще попробуйте на ProgressEvent.PROGRESS подписаться. в netstream, вроде бы, именно это происходит.

ns.addEventListener(ProgressEvent.PROGRESS, on_ProgressEvent);


Добавлено через 1 минуту
сейчас попробую, спасибо большое, хотя по-моему и это перепробовано....
И еще, добрый человек, у меня этот trace во FlexBuildere нигде не отображается, что очень отладке мешает.
Как мне за trace следить, простите за тупейший вопрос (((
Так поставьте дебаг верcию.

Anig
10.08.2012, 15:03
Да, попробую поставить
А пока пишу так
public function on_Progress(event:fl.video.VideoProgressEvent):void
{
ns.pause();
}
По идее стрим должен остановиться, но не останавливается, значит функция не вызывается, да?

Krusty
10.08.2012, 15:15
Так, событие прогресса ProgressEvent.PROGRESS не будет, отмена.

NetConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
вот это вот будет сообщать о статусе потока.
Еще раз-какие события вам нужно слушать?

Добавлено через 1 минуту
У вас, по сути, есть два объекта, в которых происходят события -это NetConnection и NetStream

Anig
10.08.2012, 15:28
Мне надо слушать время загруженного стрима и общую продолжительность стрима, передавать это progressbar-u, для отображения процесса загрузки

Добавлено через 2 минуты
ааааа!!!!!!!!!!!!!!!!!! Кжется услышал NetStatusEvent.NET_STATUS!!! Сейчас попробую кодить

Krusty
10.08.2012, 15:35
В общем, ваша задача такая. Я так понимаю, с дебагом вы разобрались
пишитесь на все события http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html
пишитесь на все события
http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/net/NetConnection.html
во всех функциях только выводите
trace(event);
выбираете нужные вам события, и все.

Anig
10.08.2012, 15:43
Да, попробую, спасибо огромное!!!

Добавлено через 1 час 56 минут
Уважаемый Krusty, я еще создаю Timer, запускаю, поймать TimerEvent нигде не могу(( Опять в пресловутом приложении. Пожалуйста, посоветуйте, куда события от таймера уходят? На чем их ловить?

Добавлено через 2 часа 59 минут
Понятно. Ловлю на самом таймере.