Avatar billede wolfgang Praktikant
07. februar 2006 - 15:10 Der er 19 kommentarer og
1 løsning

Opdater flash film dynamisk

X Hej,
Håber at I kan hjælpe mig med at gribe dette korrekt an.

På en skærm vises en webside, med en flash-fil (swf). Flash-filen kan blive opdateret når som helst af en sekretær og man kan derfor ikke planlægge nogen faste opdateringsrutiner på forhånd.

Kan man i det "skjulte" tjekke om filen er opdateret siden den blev hentet sidst? Her tænker jeg på at tjekke hvert 5. min.
- Man kunne vel evt. tjekke og sammenligne på filens dato?
(Filens navn vil ikke blive ændret!)

Hvis den er blevet opdateret, siden sidste indlæsning, skal den nye flash-fil indlæses og afspilles i stedet for.

Hvis ikke skal siden ikke opdateres, da det vil forstyrre de evt. læsere der kigger på skærmen.

Kan man evt. lave en "master" flash-film, der "kun" skal afspille den "rigtige" flash fil og løbende tjekke om den skal indlæses på ny, for at få de opdaterede oplysninger vist.

Glæder mig til at høre fra jer.

MVH
Henrik
Avatar billede alexander_j Nybegynder
07. februar 2006 - 17:52 #1
Ja det burde være muligt!

Flash kan efter min viden ikke umiddelbart tjekke datoen på en flashfilm, men hvis din sekretær kan uploade en text-fil, hvor dags dato står så kan I jo bruge det i stedet for. Alternativt kan I bruge php eller asp til tjekket om flashfilen er blevet fornyet - hvis I ikke vil lave en textfil med den fornyede dato.

Jeg tror løsningen med en master-flash-fil er metoden. Dog skal I huske at flash skal snydes (så den tror det er en ny swf den henter) når den henter den nye fil (hvis den altså er navngivet med samme navn som den første) - dette kan gøres ved at proppe en variabel i enden når man loader filen - fx:
mymc.loadMovie("minflashfil.swf?myvar="+Math.random(1000000));

Eller smartere endnu bruge dags dato+tid til at generere variablen, så er den helt unik - mit eksempel vil gå galt i 1 ud af 1 million gange.

Har du selv evnerne og værktøjerne(kodeforståelsen) til at lave masterfilen?
Avatar billede wolfgang Praktikant
07. februar 2006 - 18:18 #2
Hej - Mange tak for dit svar.
Det glæder mig at høre, at jeg ikke er helt afsporret.

Jeg har desværre ikke selv det store indblik i Flash :(
Har du lyst/mulighed for at hjælpe mig med den del af det?

Mht. dato tjek, ville det klart være bedst at kode den funktion i ASP. Det vil jeg tro, at jeg nok kunne klare.

Glæder mig til at høre mere.
Avatar billede larsholmgaard_dk Nybegynder
07. februar 2006 - 19:04 #3
Der er ingen grund til at checke om filen er ny - bare lad masterflashen hente den separate fil ind fx. hvert 5. minut, hver time eller hvor ofte det nu er nødvendigt.
Avatar billede wolfgang Praktikant
07. februar 2006 - 19:16 #4
Hej Lars,
For mit vedkommende er det nødvendigt at tjekke, om der er grund til gen-indlæse filen.

En indlæsning betyder jo at Flash-filmen starter forfra og det vil uden tvivl irritere de brugere der ser filmen i det øjeblik.
Avatar billede olebole Juniormester
07. februar 2006 - 19:25 #5
<ole>

Hej igen, wolfgang ... jeg er fulgt med fra 'den anden kategori'  :)

Prøv lige at forklare lidt tydeligere, hvordan projektet skal bruges. Er det til en skærm på en udstilling, eller ...? Hvorlang er filmen?

/mvh
</bole>
Avatar billede wolfgang Praktikant
07. februar 2006 - 20:10 #6
Det skal fremvises på en LCD-skærm og skulle gerne fungere som en infoskærm.

Der er en person, der sidder og vedligeholder en PowerPoint præsentation. Denne præsentation bliver konverteret til en SWF-fil vha. programmet FlashSpring (www.flashspring.com). Filen bliver gemt på en Server.
- Det er denne SWF der skal indlæses i "master-filmen".

Infoskærmen viser flash-filmen i fuldskærm (Embedded på en html side.)

Ulempen ved at indlæse flash-filmen i Master-filmen lige meget om den er opdateret i forhold til den tidligere indlæste, er at de personer der står og læser på infoskærm, vil blive "tvungen/forstyrret" hver 5. min. - selvom der ikke er nogen ændringer i indholdet.

Jeg håber at denne forklaring, kan hjælpe med at forstå udfordringen.
Avatar billede alexander_j Nybegynder
07. februar 2006 - 20:14 #7
Fik lyst til at lave et eksempel til dig - denne kode skal ligge i frame 1 i din masterflashfil:

this.createEmptyMovieClip("mymc",1);

dato = "";
starttid = getTimer();

mylv = new LoadVars();
mylv.onLoad = function(success){
  if(this.dato!=dato){
    dato = this.dato;
    mymc.loadMovie("din_rigtige_flashfil.swf");
  }
}

this.onEnterFrame = function(){
  if(starttid<getTimer()){
    starttid = getTimer()+5*60*1000;
    mylv.load("hent_dato.asp?myvar="+new Date().getTime(),"POST");
  }
}

ASP-filen skal så bare udskrive "dato=flashfilensdatoogtid" - og ingen html tags eller lignende.
Avatar billede wolfgang Praktikant
07. februar 2006 - 20:19 #8
Hej Alexander, Det ser spændende ud.
Inden jeg prøver det af vil jeg lige høre, om jeg ikke bør tilpasse ovenstående kode med dit tidligere forslag?

Således at:
mymc.loadMovie("din_rigtige_flashfil.swf");

Bliver til:
mymc.loadMovie("din_rigtige_flashfil.swf?myvar="+Math.random(1000000));
Avatar billede wolfgang Praktikant
07. februar 2006 - 20:33 #9
Her er mit bud på ASP-filen på funktionen.

---- Kode ----
dim fs,f
set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.GetFile("D:\infoScreen.swf")
Dato = f.DateLastModified
set f=nothing
set fs=nothing
---- Kode ----

Skal variablen "Dato", sendes videre på nogen måde?
Avatar billede alexander_j Nybegynder
07. februar 2006 - 21:44 #10
Ingen grund til at korrigere i mit eksempel - jeg har valgt dato og tidspunkt modellen i mit eksempel - da dato og tidspunkt altid er 100% unikt, mens random jo godt kan blive det samme tal -og i så fald vil flash undlade at hente den nye fil, da den tror det er den samme som tidligere.

Din variabel 'Dato' skal sendes videre i formen "dato=dindatoogtidspunkt" - altså udskrive det - i php ville jeg sige:
echo "dato=".$Dato;

Det er ikke så vigtigt hvilken form datoen har, når blot den unikt skifter udseende i forhold til hvordan den så ud ved den tidligere dato.
Avatar billede alexander_j Nybegynder
07. februar 2006 - 21:47 #11
hov - du har ret!

mymc.loadMovie("din_rigtige_flashfil.swf");
Skal laves om til
mymc.loadMovie("din_rigtige_flashfil.swf?myvar="+new Date().getTime());
Avatar billede alexander_j Nybegynder
07. februar 2006 - 21:55 #12
Ups det ser ikke ud til at virke - jeg kigger lige lidt på det og vender tilbage!
Avatar billede wolfgang Praktikant
07. februar 2006 - 21:59 #13
OK - jeg har også oplevet lidt modgang med eksemplet :)

Glæder mig til at høre fra dig.
Avatar billede alexander_j Nybegynder
07. februar 2006 - 22:12 #14
Hmm beklager virkelig at jeg sådan har fyldt dit spørgsmål med indlæg og svar som ikke virker.

Jeg troede virkelig godt man kunne sende variabler med i en loadMovie - det kan man nemlig i objectkoden i html - men af en eller anden grund kan man kun loade movies på den 'rene' sti. - hvilket betyder at mit eksempel ikke virker :-(

Den eneste løsning jeg umiddelbart kan komme på nu er at lade den fil der skal hentes skifte navn, når der er ændret i den - men det kræver enten en del af sekretæren som laver filen - eller noget af dig og det uploadscript du så må lave.

Strukturen skulle så være som følger:
1. masterflashfilen kalder scriptfil som sender navnet på flashfilmen tilbage.
2. masterflashfilen sammenligner navnet med et eventuelt tidligere navn på flashfilmen, hvis det nye navn ikke harmonerer med det tidligere, så henter masterflashfilen den nye flashfilm ellers gør den ingenting.

I dit serverscript skal du så lave:
1. et uploadscript som navngiver den uploadede flashfilm udfra dagsdato og tidspunkt(så det bliver unikt) - samt sletter den forrige film
2. en scriptfil som udskriver flashfilmens navn

Er det gennemskueligt hvad jeg mener?
Avatar billede wolfgang Praktikant
08. februar 2006 - 09:42 #15
Hej, Det er jeg ked af at høre.

Jeg har desværre ikke mulighed for at benytte Upload-komponenter eller lign. i drifts-scenariet for denne opgave :(
- Der må da være en Flash-løsning til mit problem?

PS: Når jeg afvikler min master-film (efter dit eks.), så loader den indholds-filen godt nok, men den viser et underligt udsnit af indholdet.
Ca. 1/4 af indholdet er "stretchet" ud til at fylde hele skærmen.
Avatar billede olebole Juniormester
08. februar 2006 - 13:06 #16
alexander_j >> Tricket med at sætte en unik query i 'loadMovie' virker vel ikke, fordi det ikke er nødvendigt. Er det ikke netop sådan, at swf'er ikke caches på klienten?
Er det ikke sådan, at hvis swf'en er blevet opdateret, så får man automatisk den nye version, næste gang den loades med 'loadMovie'?

wolfgang >> Er det testet, om den nye film bliver loaded med en helt alm. 'loadMovie'?
Avatar billede wolfgang Praktikant
08. februar 2006 - 13:44 #17
Hej, Jeg arbejder pt. på en anden løsningsmodel.
Jeg vender tilbage så snart den er aftestet.
Avatar billede alexander_j Nybegynder
08. februar 2006 - 15:23 #18
olebole -> swf-filerne caches i klienten som jeg kan se det og i de forsøg jeg har lavet med det!
Avatar billede olebole Juniormester
08. februar 2006 - 21:53 #19
- æææuuvv ...  :o|

Jamen, så kan man læse .swf'en på serveren og skrive indholdet ud i et dokument, hvor man sætter HTTP-headers, der modvirker caching - samt én, der fortæller klienten, det er en .swf, der ankommer. Til sidst returneres resultatet til klienten. I PHP ville jeg skrive:

<?
// No-cache headers:
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

// Halloooooo ... her kommer en Flash-dimmer:
header('Content-type: application/x-shockwave-flash');

// Åben flashfilen for binary-read:
$fp = fopen("test.swf", "rb");

// Læs filen ind i variablen $flash:
$flash = fread($fp, filesize("test.swf"));

// Luk filen:
fclose($fp);

// Skriv variablen ud:
print $flash;
?>
Avatar billede olebole Juniormester
08. februar 2006 - 21:56 #20
- og i stedet for at loade 'http://www.domain.dk/sti/til/fil.swf', loader man så PHP-filen: 'http://www.domain.dk/sti/til/fil.php'
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester