Avatar billede angelenglen Nybegynder
06. november 2012 - 15:38 Der er 20 kommentarer og
1 løsning

Embedded VLC player looper ikke.

Jeg har en embedded VLC player, men den afspiller kun filerne på min afspiller, den starter ikke forfra når den er færdig med sidste fil.

Hvad mon jeg gør forkert eller mangler?

Kode:
<html>
    <head>
        <title>VLC Video Player</title>
    </head>
    <body bgcolor="#000000" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" onload="">
        <div id="playerDiv">                   
            <OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921" codebase="http://downloads.videolan.org/pub/videolan/vlc/latest/win32/axvlc.cab" id="vlcPlayer" name="vlcPlayer" events="False" width="100%" height="100%">
                <param name="Src" value="http://localhost/_video/play.asx" />
                <param name="ShowDisplay" value="False" />
                <param name="AutoLoop" value="True" />
                <param name="Loop" value="True" />
                <param name="AutoPlay" value="True" />
                <param name="AllowFullscreen" value="True" />
                <param name="Toolbar" value="True" />
                <param NAME="wmode" VALUE="transparent">
            </OBJECT>
        </div>
    </body>
</html>


play.asx:
<ASX Version = "3.0">
    <ENTRY><REF HREF="video-001.wmv"/></ENTRY>
    <ENTRY><REF HREF="video-002.wmv"/></ENTRY>
    <ENTRY><REF HREF="video-003.wmv"/></ENTRY>
    <ENTRY><REF HREF="video-004.wmv"/></ENTRY>
    <ENTRY><REF HREF="video-005.wmv"/></ENTRY>
    <ENTRY><REF HREF="video-006.wmv"/></ENTRY>
    <ENTRY><REF HREF="video-007.wmv"/></ENTRY>
    <ENTRY><REF HREF="video-008.wmv"/></ENTRY>
    <ENTRY><REF HREF="video-009.wmv"/></ENTRY>
    <ENTRY><REF HREF="video-010.wmv"/></ENTRY>
    <ENTRY><REF HREF="video-011.wmv"/></ENTRY>
    <ENTRY><REF HREF="video-012.wmv"/></ENTRY>
</ASX>


Ps. det er kun meningen det skal virker i Internet Explorer, derfor ingen <embed> tag.
Avatar billede olebole Juniormester
06. november 2012 - 17:07 #1
<ole>

Det synes at være et velkendt problem. En hurtig googling giver blandt meget andet denne JS-løsning - og der er masser af andre bud ... hvis man søger  *o)

/mvh
</bole>
Avatar billede angelenglen Nybegynder
07. november 2012 - 09:09 #2
Ah, jeg har søgt efter syntax og i dokumentationen, havde ikke tænkt på at søg efter en javascript løsning :-)

Prøver lige om jeg kan få det til at spille :-)
Avatar billede angelenglen Nybegynder
07. november 2012 - 09:44 #3
Det her virker for mig :-)

Du må gerne lægge et svar for points :-)

<HTML>
    <HEAD>
        <TITLE>VLC Video Player</TITLE>
        <SCRIPT>
            function playAgain() { if (document.vlcPlayer.playlist.isPlaying==false) { document.vlcPlayer.playlist.play(); } }
            function startWatcher() { setInterval("playAgain()",1000); }
        </SCRIPT>
    </HEAD>
    <BODY BGCOLOR="#000000" TOPMARGIN="0" LEFTMARGIN="0" RIGHTMARGIN="0" BOTTOMMARGIN="0" ONLOAD="startWatcher();">
        <DIV id="playerDiv">                   
            <OBJECT CLASSID="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921" ID="vlcPlayer" NAME="vlcPlayer" EVENTS="False" WIDTH="100%" HEIGHT="100%">
                <PARAM NAME="Src" VALUE="/play.asx" />
                <PARAM NAME="ShowDisplay" VALUE="False" />
                <PARAM NAME="AutoLoop" VALUE="True" />
                <PARAM NAME="Loop" VALUE="True" />
                <PARAM NAME="AutoPlay" VALUE="True" />
                <PARAM NAME="AllowFullscreen" VALUE="True" />
                <PARAM NAME="Toolbar" VALUE="True" />
                <PARAM NAME="wmode" VALUE="transparent">
            </OBJECT>
        </DIV>
    </BODY>
</HTML>
Avatar billede olebole Juniormester
07. november 2012 - 18:11 #4
Ellers tak, jeg samler ikke point. Læg selv et svar og accepter det, så tråden lukkes  =)

Jeg ville nu nok ikke lade en timer stå og 'klikke' én gang i sekundet. Mon ikke du kan bruge nogle af player'ens medfødte properties? Hvad med f.eks:

isplaying() : return true if the plugin is playing something.

get_length() : Get the media's length in seconds.

get_position() : Get the current position in the media in percent.

get_time() : Get the current position in the media in seconds.

De ser da overordentlig interessante ud i mine øjne

Link til kilde
Avatar billede olebole Juniormester
07. november 2012 - 18:16 #5
Når du starter player'en, kan du aflæse mediets længde i sekunder. Så kan du sætte en setTimeout til lidt før og lade den 'klikke' en gang i sekundet - indtil, mediet er helt færdigspillet. Herefter stopper du timeren - kalder Play igen - og lader hele processen køre forfra  =)
Avatar billede angelenglen Nybegynder
07. november 2012 - 18:48 #6
Det kan nok tweakes lidt.

Jeg havde selv tænkt lidt i samme retning, men droppede det i første omgang fordi jeg ikke kunne få playlistens samlede længde, men man kan selvfølgelig godt nøjes med den nuværende fil og tjekke kort før den burde være stoppet - når den så engang når til den sidste fil på listen, vil den så nok starte forfra... den skal lige tænkes helt igennem :-)
Avatar billede olebole Juniormester
07. november 2012 - 19:22 #7
Jeg ved ikke, hvor lang din playlist er - eller hvorlang tid det vil tage at bladre den igennem og loade hver fil én ad gangen. På den måde ville du kunne indsamle info om hele listens filer, inden du begynder afspilningen af første film.

En anden mulighed var måske, at lade en skjult player aflæse længderne af de følgende film, når den første film begynder i den 'egentlige' player(?)
Avatar billede angelenglen Nybegynder
07. november 2012 - 20:32 #8
Ifølge dokumentationen er de properties du lister deprecated og kan ikke bruges.
Det passer også overens med at jeg ikke kan trække informationer om tiden ud med dem :-/

Jeg har kigget i dokumentationen, og det ser ud til at de er gået over til at det skal være event-baseret.
Ud fra det kom jeg frem til at alt nedenstående javascript er nødvendigt for at fyre en play-kommando af når playlisten er nået til ende.

Udover at det ikke virker (gør bare ingenting...), så syntes jeg det er overdrevet meget kode for så lidt, og jeg syntes ærligt talt det virker lidt "beskidt" at skulle lave så meget for så lidt.

Så tror desværre jeg holder mig til at tjekke hvert sekund - selvom jeg egentligt gerne ville have optimeret på det :-/

registerVLCEvent('MediaPlayerEndReached', handleEvents);

function registerVLCEvent(event, handler)
{
    var vlc = getVLC("vlcPlayer");
    if (vlc) {
        if (vlc.attachEvent) {
            // Microsoft
            vlc.attachEvent (event, handler);
        } else if (vlc.addEventListener) {
            // Mozilla: DOM level 2
            vlc.addEventListener (event, handler, false);
        } else {
            // DOM level 0
            vlc["on" + event] = handler;
        }
    }
}

function handleEvents(event)
{
    if (!event)
        event = window.event; // IE
    if (event.target) {
        // Netscape based browser
        targ = event.target;
    } else if (event.srcElement) {
        // ActiveX
        targ = event.srcElement;
    } else {
        // No event object, just the value
        alert("Event value" + event );
        return;
    }
    //alert("Event " + event.type + " has fired from " + targ );
    document.vlcPlayer.playlist.play();
}

function getVLC(name)
{
    if (window.document[name])
    {
        return window.document[name];
    }
    if (navigator.appName.indexOf("Microsoft Internet")==-1)
    {
        if (document.embeds && document.embeds[name])
            return document.embeds[name];
    }
    else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
    {
        return document.getElementById(name);
    }
}


Sjovt nok, selvom dokumentationen selv benytter getVLC funktionen, så var den ikke at finde i dokumentationen - den måtte jeg google mig frem til... *suk*
Avatar billede angelenglen Nybegynder
07. november 2012 - 20:32 #9
Avatar billede olebole Juniormester
07. november 2012 - 20:53 #10
Den "beskidte" løsning er din egen timer-dims. Det kan ikke være meningen, at PC'en skal udføre så meget for så lidt. Hvilke mængder kode du er nødt til at skrive, kan være rystende ligegyldigt. En kort kode er ofte langt dårligere end en lang  =)

Hvad mener du med, at det ikke fungerer? Får du JavaScript-fejl - og kikker du overhovedet efter den slags?

Hvad sker der - og hvad sker der ikke? Hvad har du fået ud af at prøve at alert'e i dine funktioner og deres betingelser? Indeholder de forskellige variabler, hvad du forventer?
Avatar billede angelenglen Nybegynder
07. november 2012 - 20:58 #11
Ingen javascript fejl, og ingen alerts.
Det er lidt som om eventet aldrig bliver fyret af :-/
Avatar billede olebole Juniormester
07. november 2012 - 21:03 #12
Derudover ville jeg nu nok vælge en player fra et firma, som i det allermindste evner at skrive valide JavaScript tags, når de viser, hvordan deres produkt skal anvendes.

Derudover har der aldrig eksisteret et embed element/tag i HTML, før HTML5 - men resten af deres kode ligner noget fra midten/slutningen af 90'erne.

Deres eksempler lugter fælt af inkompetence  :o|
Avatar billede olebole Juniormester
07. november 2012 - 21:07 #13
Funktionen getVLC ligner noget, der er løgn! Hvad får du af at alert'e objektet her:

function registerVLCEvent(event, handler){
    var vlc = getVLC("vlcPlayer");
    alert(vlc);
Avatar billede angelenglen Nybegynder
07. november 2012 - 21:08 #14
Jeg er rørende enig.

Nok også derfor at jo mere tid jeg bruger på dette, jo mindre entusiastisk er jeg for at bruge dette produkt.

I sidste ende kommer jeg nok til at finde et andet alternativ :-(
Avatar billede angelenglen Nybegynder
07. november 2012 - 21:10 #15
Svar på dit spørgsmål vedr. alert'en i registerVLCEvent:

i IE 9 alerter den null, i Chrome alerter den undefined.
Avatar billede angelenglen Nybegynder
07. november 2012 - 21:12 #16
(Det forklarer også hvorfor resten af koden ikke virker...)
Avatar billede olebole Juniormester
07. november 2012 - 21:17 #17
#16: Helt korrekt. Derfor spurgte jeg om, hvad du havde fået ud af at alert'e dine variabler. Dér begynder helt elementær fejlfinding  =)

function registerVLCEvent(event, handler){
    var vlc = document.getElementById("vlcPlayer");

- og glem så alt om getVLC  *o)
Avatar billede angelenglen Nybegynder
07. november 2012 - 21:23 #18
Ja, det er også sådan jeg plejer at fejlfinde, og var også gået i gang med det, hvor jeg baglæs lagde alerts ind længere og længere tilbage i koden - men opgav det kort før jeg nåede helt tilbage til begyndelsen, hvor fejlen jo reelt opstod :-/

Og ja, getVLC er jo helt overflødig :-)
Avatar billede olebole Juniormester
07. november 2012 - 21:54 #19
Man kunne jo passende vende den lidt: Når du møder en person, der er bedre end du til at finde fejl, ved du, at du står overfor 'en tumpe', der har lavet langt flere fejl, end du selv har gjort.

Jeg ville nok som det første tjekke, om handlerne blev kaldt - men det understreger jo nok blot, at jeg har lavet frygtelig meget l*rt, som ikke har virket  *D
Avatar billede angelenglen Nybegynder
07. november 2012 - 23:03 #20
Som min gamle engelsk lærer sagde:

Hellere sige 1000 ord og lave 100 fejl, end kun sige 100 ord og lave 10 fejl - for så har man både sagt 10 gange så mange rigtige ord, og lært af 10 gange så mange fejl :-)

Så at have lavet/oplevet mange fejl er ikke en dårlig ting :-)
Avatar billede olebole Juniormester
08. november 2012 - 00:06 #21
*LoL* Fin version af den gamle sandhed!  :D
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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