SWiSH Forum
Forum użytkowników programów SWiSH

SWiSH Max - Ładowanie zewnętrznego pliku FLV

tjindy - Sob 04 Lut, 2012 09:33
Temat postu: Ładowanie zewnętrznego pliku FLV
Witam serdecznie,

jak zwykle poległem przy - wydawać by się mogło - prostym temacie.

W skrócie: wymóżdżyłem sobie na stronie animację przedstawiającą ćwiczące postacie. Film zapisałem w FLV - waga 10 MB. Zrobiłem sobie kontenerek (klip.swf) dla filmu który go czyta. Następnie w swej naiwności próbowałem za pomocą drugie swf`a (loadera) czytać klipa - i wsio fajnie tylko że loader nie działa tak jak sądziłem.
Po prostu zlicza wielkość samego klip.swf (22 kB) - a już nie "przypisanego" w nim zewnętrznego pliku FLV.
Być może nawet to logiczne.

Wracając jednak do tematu - czy ktoś mógłby poratować mnie wiedzą na ten temat jak sobie poradzić w takiej sytuacji? Starałem się przekopać fora swishmaxa - jednakże jakoś nie potrafię sklecić niczego sensownego. Podejrzewam jednak że może mieć to związek z poleceniami sterującymi strumieniowaniem ;)

W wersji bez loadera - przy posiadaniu w miarę szybkiego łącza klip się wyświetla, mogę go potem loopować, wstawiać zdarzenia (na linii czasu oczywiście). Gorzej gdy osoba posiada wolne łącze - wtedy klip się zatrzymuje, gubi ramki, widać błędy w kodowaniu/kwantyzacji.
Stąd nieodzownym elementem byłoby puszczenie klipa po jego załadowaniu oraz moja gorąca prośba o nakierowanie toku myślenia mego we właściwym kierunku :)

Pozdrawiam
Janusz T.

PS. Link do strony gdzie jest animacja: www.imxs.pl/cardiofit/fit

Januszr - Sob 04 Lut, 2012 10:27

EXTERNAL FILE PRELOAD:

http://blog.swishzone.com/?p=47
oraz
http://blog.swishzone.com/?p=3426

Jak załączysz kawałek tego SWI, z którym masz problemy to pewnie uda mi się coś wymyślić. A tak na szybko to... nachodzi mnie jedna myśl: po cholerę Ci flv skoro masz postacie jednobarwne, które aż prosi się do vektora przerysować?

tjindy - Sob 04 Lut, 2012 13:32

Tak, przeglądałem te przykłady i nawet starałem się coś z tego zrobić.

Ale ok, wrócę jeszcze raz do kodu i postaram się podesłać coś sensownego - chociaż przy moim poziomie umiejętności będzie niezły ubaw :D

Januszr napisał/a:
EXTERNAL FILE PRELOAD:
...CIACH...
..nachodzi mnie jedna myśl: po cholerę Ci flv skoro masz postacie jednobarwne, które aż prosi się do vektora przerysować?


Dobrze postawione pytanie - moja riposta brzmi: jakim programem mogę trace`ować animację? I to tak abym miał wektorek ? Lub też: rozbić animację na klatki i potem zamieniać na wektor... ?

Pozdrawiam
Janusz T.

Januszr - Sob 04 Lut, 2012 14:10

Nie wiem :) Ta animacja wygląda jakby była zrobiona w wektorach a potem zapisana jako AVI :)
Był jednak taki program... Ale nie pomogę a tym.
Anyway, jest od groma programów do zapisu filmu do pojedynczych klatek: np SwishMax4, jednak może jak wpiszesz w wyszukiwarkę "avi t obmp" to znajdziesz więcej.
Co do zamiany bmp na vektora: Macromedia flash 5, corel trace, i znowu: w wyszukiwarkę: bmp to vector :)
A może nawet znajdziesz "avi to vector?

Tutaj raczej ubaw jest jak ktoś nie próbuje zrobić tylko uważa, że to koncert życzeń. Nie wstyd nie wiedzieć, wstyd udawać, że się wie :P

tjindy - Sob 04 Lut, 2012 14:33

Animacja była na blueboxie - czyli zielonym ekranie :D
W Sony Vegas dałem chromakey + delikatny glow, dorzuciłem tło wycięte z tworzonego szablonu. Zapisałem do do xvida -> convert do FLV.
W swishmax4 dodałem do klipu maskę (to fioletowe ustrojstwo z dołu). I pełen nadziei wrzuciłem na serwa. U mnie fajnie śmiga - no ale mam niemałe łącze. Przetestowałem u innych i (cenzura).

Macromedia i corel odpadają - nie mam licencji i mnie nie stać.
Zostaje mi raczej nauczenia się poprawnego ładowania plików FLV, z pomocą tegoż forum. Co jest chyba najlepszym rozwiązaniem - będzie doświadczenie no i inne ludziska też zapewne skorzystają :)

Ok, lecę z psem i po zakupy, a potem siadam do skryptowania. Jak już coś będę miał to zapodam :)

Pozdrawiam
Janusz T.

PS. Zlecenie jest za grosze, ale to akurat bardziej ambitne podejście tfurcy niż zarobek ;)

krzywy105 - Sob 04 Lut, 2012 15:52

Nie wiem czy dobrze rozumie problem ale czy nie możesz zrobić preloadera do ładowanego pliku z filmikiem?
czyli coś w rodzaju:

Kod:

 p = animacja.getPercentLoaded();
      if(p < 100) {_parent.animacyjny.prevFrameAndPlay ();}


oczywiście wcześniej ładujesz plik do animacja przez LoadMovie

tjindy - Sob 04 Lut, 2012 16:05

krzywy105 napisał/a:
Nie wiem czy dobrze rozumie problem ale czy nie możesz zrobić preloadera do ładowanego pliku z filmikiem?
czyli coś w rodzaju:

Kod:

 p = animacja.getPercentLoaded();
      if(p < 100) {_parent.animacyjny.prevFrameAndPlay ();}


oczywiście wcześniej ładujesz plik do animacja przez LoadMovie


Gdybym miał animację zaimportowaną do swf`a to tak, ale wolę strumieniować plik zewnętrzny bo ma lepszą jakość. W podanym przez Ciebie przykładzie swf miałby wtedy wielkość, po kompresji, powiedzmy 2-3 MB i wtedy to by zadziałało. Zresztą, pierwsze próby tak właśnie czyniłem.
Ok, biorę się do pracy, rodacy. Albo mnie zmorzy kod albo sobotni wspomagacz ;)

krzywy105 - Sob 04 Lut, 2012 16:35

Wydaje mi się że klasa loadMovie obsługuje pliki .flv i możesz przecież tak sprawdzać procent załadowania tego pliku.
tjindy - Sob 04 Lut, 2012 16:52

krzywy105 napisał/a:
Wydaje mi się że klasa loadMovie obsługuje pliki .flv i możesz przecież tak sprawdzać procent załadowania tego pliku.


Hmmm.. jak na razie czyta wszystko inne bo testuję na jpg, png, swf. Przy próbie FLV preloader zjeżdża mi do 1 % i nic....
Teraz zrobiłem tak że preloader czyta swf w którym jest zlinkowany FLV.
Test tegoż tutaj -> http://www.imxs.pl/test/

Jeśli ktoś ma słabsze łącze to będę wdzięczny za opinie. Jeśli pierwsza pozycja faktycznie się zacznie odtwarzać po załadowaniu to jesteśmy w domu. Jeśli jednak zacznie się rwać - to znaczy że idę na spacer przemyśleć moje życie ;)

Załączam SWI - które niczym się nie różni od tego co już mamy na stronie podanej przez JanuszR.

PS.
U mnie te 10 MB powinno się ładować ok 3 sek. (optymistyczny wariant). Wygląda na to że w nosie ma loadera tak czy owak. Czyta "wagę" samego SWFa.

krzywy105 - Sob 04 Lut, 2012 17:46

Chyba jednak loadMovie nie obsługuje .flv

W jaki sposób wczytujesz zewnętrzny flv? NetConnection ,NetStream z tego co widzę ma wszystko do obsługi buforowania itd, ale niestety jeszcze tego nie stosowałem więc nie bardzo pomogę.

tjindy - Sob 04 Lut, 2012 18:02

krzywy105 napisał/a:
Chyba jednak loadMovie nie obsługuje .flv

W jaki sposób wczytujesz zewnętrzny flv? NetConnection ,NetStream z tego co widzę ma wszystko do obsługi buforowania itd, ale niestety jeszcze tego nie stosowałem więc nie bardzo pomogę.


W pierwszej wersji wrzuciłem flv do swisha i sam mi zlinkował flv jako zewnętrzne media. Zapisałem to jako klip.swf. Potem chciałem do tego dorobić preloadera - i zaczęły się schody.

Na stronie zamieściłem w 3 pozycji kod ze swishzone:
Kod:

onSelfEvent (load) {
    var listener:Object = new Object();
}
onSelfEvent (load) {
    play = "true";
}
onFrame (5) {
    listener.onLoadInit = function(targetMC:MovieClip):void {
        targetMC.obj._width = 480;
        targetMC.obj._height = 300;
        var connection:NetConnection = new NetConnection();
        connection.connect(null);
        var stream:NetStream = new NetStream(connection);
        stream.onStatus = function(info) {
            outTFB = "";
            outTFB += "Stream Status is, \n";
            outTFB += "Event: " + info.code + "\n";
            outTFB += "Type:  " + info.level;
        }
        stream.onMetaData = function(infoObject) {
            metaTFB = "";
            for(var prop:String in infoObject) {
                metaTFB += prop + ": " + infoObject[prop] + "\n";
            }
        }
        targetMC.obj.attachVideo(stream);
        //loads flv file
        stream.playIt = stream.play;
        stream.playIt("Fitnes2.flv");
    }
}
onFrame (5) {
    var MCLoader:MovieClipLoader = new MovieClipLoader();
    MCLoader.addListener(listener);
    MCLoader.loadClip("videoObject.swf", "videoObjectMC");
}
onFrame (6) {
    stream.onMetaData = function(evt:Object):void
    {
        duration = evt.duration;
    }
    stream.onStatus = function(evt:Object):void
    {
        if (this.time > 0 && this.time >= (duration))
        {
            gotoSceneAndPlay("<current scene>",40);
            delete this.onStatus;
        }
    }
}
onFrame (30) {
    stop();
}
onFrame (39) {
    stop();
}
onFrame (46) {
    stop();
}

I działa jak widać.
Jako że podobno "play" jest funkcją specjalną Swishmaxa stąd zrobiono podmiankę stream.playIt.. ale mi swish wywala błędy.

Teraz staram się zrozumieć kod do strumieniowania i jakoś to ugryźć. Temat ciekawy i sądzę że wielu powinien zainteresować.
Niestety, ja w AS kiepski jestem do "bulu" także jak ktoś pomoże rozszyfrować kod to będę wdzięczny :)

espe1 - Sob 04 Lut, 2012 22:50

W komponentach swisha masz kilka wersji odtwarzaczy flv (proste, skomplikowane).
Po przeciągnięciu na scenę, można je modyfikować w parametrach (wielkość, kolory itd)
W parametrach wpisujemy też nazwę pliku (plik lokalny w tym samym katalogu) lub adres http (plik zewnętrzny).

Jeśli ktoś ma bardzo słabe łącze (typu bezpłatne Aero2), to mu nic nie pomoże przy pliku 10mb.

tjindy - Nie 05 Lut, 2012 17:10

espe1 napisał/a:
W komponentach swisha masz kilka wersji odtwarzaczy flv (proste, skomplikowane).
Po przeciągnięciu na scenę, można je modyfikować w parametrach (wielkość, kolory itd)
W parametrach wpisujemy też nazwę pliku (plik lokalny w tym samym katalogu) lub adres http (plik zewnętrzny).

Jeśli ktoś ma bardzo słabe łącze (typu bezpłatne Aero2), to mu nic nie pomoże przy pliku 10mb.


No i dlatego lepiej mieć kontrolę nad plikiem z poziomu AS niż playera. :)
Na ten skromny przykład - można zliczać czas ładowania i jeśli przekroczy "ileśtamsekund" - dać alternatywny swf z małą wagą..

Jutro wracam do tematu i będę grzebał dalej :)
Pozdrawiam

krzywy105 - Nie 05 Lut, 2012 17:19

Kod:

var netConn:NetConnection = new NetConnection();

netConn.connect(null);

var netStream:NetStream = new NetStream(netConn);

my_video.attachVideo(netStream);

netStream.setBufferTime(5);

netStream.play("sample.flv");



Zainteresował mnie temat i doszedłem do tego co powyżej. Ten kod pozwala odtwarzać strumieniowo zewnętrzny .flv z zachowaniem właśnie takich parametrów jak czas buforowania itd.
Ważne:
1 my_video to obiekt widoczny w konspekcie wstawiony jako zewnętrzne media (wstaw -> zewnętrzne media) a nie "klip".
2. obiekt my_video musi mieć odznaczone "Użyj automatycznego skryptu" w właściwościach.

To tylko najprostszy przykład ale już rozbudowa nie powinna być problemem.

espe1 - Nie 05 Lut, 2012 20:58

tjindy napisał/a:

No i dlatego lepiej mieć kontrolę nad plikiem z poziomu AS niż playera. :)
Na ten skromny przykład - można zliczać czas ładowania i jeśli przekroczy "ileśtamsekund" - dać alternatywny swf z małą wagą..

Jutro wracam do tematu i będę grzebał dalej :)
Pozdrawiam



Nie miałbyś tylu problemów, gdybyś przekonwertował flv na swf. Mnóstwo darmowych konwerterów w sieci.
Zaraz zacznie ci się problem z powtarzaniem, bo pewnie chciałbyś loopować flv itd.
Z plikawi swf nie ma problemów: powtarzanie, preloadery, podmienianie plików itd.


Powered by phpBB modified by Przemo © 2003 phpBB Group