Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Hybrid View

  1. #1

    Durata di alcuni files MP4

    Sto cercando di calcolare la durata dur di una serie di files MP4.
    Questa la prima parte del codice :
    codice:
    <HTML>
    <HEAD>
    <script language=javascript runat=server>
    var vid = document.getElementById("myVideo");
    function CalcolaDurata() { 
      var d=vid.duration;
      return d;
    } 
    </script>
    </HEAD>
    <%
      CR=chr(13)+chr(10)
      V=chr(34)
    .......
    .......
    mentre la funzione Javascript viene richiamata all'interno di un codice classic ASP
    codice:
    response.write "<table><tr>" & CR    
    response.write "<td>" & CR    
    response.write "<video id='myVideo' width='320' height='180' controls>" & CR
    response.write "<source src='Video/" & NomeFile & "' type='video/mp4'>" & CR
    response.write "</video>" & CR
    response.write "</td>" & CR
    response.write "</tr></table>" & CR
    dur=CalcolaDurata()
    response.write dur
    response.write "<BR>"
    ...
    ...
    Tuttavia qualcosa mi sfugge e non sono ancora riuscito ad ottenere quanto desiderato, pur avendo specificato "runat=server" nel codice Javascript.
    Qualcuno sa darmi una dritta ?
    Grazie per l'attenzione

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Tu stai cercando di far eseguire una funzione JavaScript all'interno di un codice ASP?!
    Chiaramente non può funzionare così.

    Un linguaggio lato server (ASP) e uno lato client (JavaScript) non possono interagire in quel modo.

    Attraverso il codice ASP, che viene eseguito dal server, tu ricavi un documento HTML in cui c'è, tra le altre cose, del codice JavaScript. Il documento HTML (assieme al JavaScript) non viene però eseguito lato server; sarà piuttosto analizzato ed eseguito lato client una volta che arriva sul browser.

    Va da sé che non può essere eseguito alcuno JavaScript nel momento in cui viene costruito il documento HTML in ASP, perché quella roba dovrà attendere ad arrivare al client per essere eseguita e, una volta che il documento arriva al client, ASP è bello che andato.

    Il codice per recuperare la proprietà duration andrà quindi eseguito sempre nell'ambito JavaScript. Se vuoi che il valore restituito compaia nella pagina, dovrai aggiungerlo alla pagina attraverso eventuali metodi JavaScript, ad esempio usando document.write() o, meglio ancora, usando la proprietà innerHTML di un qualche elemento contenitore che avrai opportunamente predisposto per accogliere quel dato, o un qualcosa di analogo.

    Inoltre, la proprietà duration può essere letta solo dopo che i metadata dell'elemento video sono stati caricati. Per poter quindi assicurarti che ciò avvenga puoi usare l'evento loadedmetadata di quell'elemento video.

    Qui un semplice esempio:
    codice:
    <!DOCTYPE HTML>
    <html lang="it">
      <head>
        <title>Esempio</title>
      </head>
      <body>
        <video id="myVideo" width="320" height="176">
          <source src="https://www.w3schools.com/tags/mov_bbb.mp4" type="video/mp4">
        </video>
        <div id="durataVideo"></div>
        <script>
          const vid = document.getElementById('myVideo');
          vid.onloadedmetadata = function(){
            document.getElementById('durataVideo').innerHTML = 'Durata (secondi): ' + this.duration;
          };
          </script> 
      </body>
    </html>
    Ultima modifica di KillerWorm; 13-03-2023 a 19:56
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Ero già a conoscenza dell'esistenza di questa particolare la differenza fra codice ASP (eseguito sul server) e codice Javascript (eseguito sul client). Pensavo però che con qualche artificio programmatorio fosse superabile.
    Aggiungo che in passato ho scritto del codice ASP che a sua volta scriveva (con del banali respose.write) del codice Javascript "parametrizzato". Ed il risultato era soddisfacente.
    Ad esempio leggendo un database MDB era stato semplice scrivere linee di codice Javascript del tipo
    codice:
    new google.maps.LatLng(44.392556,7.529115),
    new google.maps.LatLng(44.392556,7.529118),
    new google.maps.LatLng(44.392556,7.529118),
    new google.maps.LatLng(44.392556,7.529118),
    che disegnava una traccia GPS su una mappa di Google.
    Pensavo (sbagliando ?) che un ulteriore passo fosse possibile per conseguire quanto desiderato.
    Mi sembra viceversa di capire che, secondo te, ciò non è assolutamente possibile. Ma googlando si trovano numerosi esempi di codice Javascript integrato a codice Asp, ma non so come unire i 2 mondi.
    Il mio scopo finale sarebbe quello di aggiornare un campo di un database con la durata di una serie limitata (5 o 6) di files video MP4.
    Nel mio esempio basterebbe che la variabile dur fosse valorizzata al valore giusto.
    codice:
    dur=CalcolaDurata()
    E' veramente impossibile ?

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Quote Originariamente inviata da giustavalla
    Ero già a conoscenza dell'esistenza di questa particolare la differenza fra codice ASP (eseguito sul server) e codice Javascript (eseguito sul client)
    Perdonami ma dal codice che hai postato mi è parso di capire che questo concetto non ti fosse chiaro.

    Quote Originariamente inviata da giustavalla
    Ma googlando si trovano numerosi esempi di codice Javascript integrato a codice Asp, ma non so come unire i 2 mondi.
    ASP può certamente produrre del codice JavaScript, ma serve poi un browser per eseguirlo. Per "comunicare" tra client e server, in specifici contesti, si utilizza AJAX, ma non penso sia questo il caso.

    Altre tecnologie, come Node.js, permettono di eseguire codice JavaScript dal server. Nel tuo caso però non so se questo possa essere utile a risolvere quanto chiedi, o quantomeno attuabile.

    Quote Originariamente inviata da giustavalla
    Il mio scopo finale sarebbe quello di aggiornare un campo di un database
    Allora non riesco a capire perché pensi sia necessario usare JavaScript. In che senso intendi "aggiornare"?
    Mi sfugge qualcosa. Perché hai la necessità di recuperare questi dati in modo programmatico?
    Se i video sono quei 5 o 6, e restano immutati, potresti ricavare manualmente la durata e usare tali valori come meglio ti pare.

    Fammi capire. Puoi chiarire meglio il contesto?
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Allora provo a spiegare meglio, ma sarò necessariamente lungo e, spero, comprensibile.
    Un raspberry pi è collegato in wifi ad un webcam posizionata dentro ad un nido. Oltre ad una visione in diretta di tale webcam su un mio sito web avviene che ad ogni movimento all'interno del nido viene prodotto automaticamente un video MP4 (che ha una durata massima di 4 minuti, ma in genere è inferiore). Il file relativo viene poi inviato (sempre automaticamente) tramite FTP al sito già citato.
    Nel sito web ogni ora viene lanciata (tramite crontab) una pagina asp che elenca i nuovi file MP4 presenti e ne dovrebbe (il condizionale è d'obbligo) calcolarne la durata. Ciò per cancellare quelli troppo brevi e in ogni caso per registrare su un database MDB il nome del file stesso e la durata, oltre ad altre informazioni.
    Questo elemento (la durata) serve più che altro per completezza delle informazioni visualizzabili in una tabella in cui compare ad ogni riga, oltre al link a ciascun video anche la sua durata. Nella "campagna del 2022" avevo calcolato tale durata dividendo la grandezza del file per 110000, ma era un dato assai impreciso.
    Nella imminente "campagna 2023" vorrei perfezionare le cose e calcolare la durata effettiva, espressa in secondi veri.
    Direi che devo necessariamente usare una pagina asp per popolare il database e per lanciare del codice Javascript (o altro linguaggio) che calcoli la durata del video e consenta alla pagina asp di scrivere il corretto valore nel database.
    Come spero si sia compreso la citata pagina asp non ha interfaccia video, ossia viene lanciata ogni ora in un server posizionato chissà dove.
    A giorni dovrebbe arrivare una coppia di cinciallegre che ogni anno frequenta quel nido e vorrei esser pronto; tutto il resto lo è ed è caratteristica di questo mio progetto l'estremo suo automatismo: non c'è alcun intervento manuale da parte mia.

  6. #6
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,781
    non mi risulta che con asp sia possibile leggere la durata di un filmato.
    a meno di fare complicate operazioni di calcolo basandosi sui meta dati, sempre se possibile e che questi dati ci siano.

    puoi invece leggeri con JS, qui qualche esempio di base.
    volendo, un volta letto il dato, puoi sempre salvarlo nel DB con una procedura separata.
    https://www.targetweb.it/come-recupe...on-javascript/
    https://www.w3schools.com/tags/av_prop_duration.asp
    https://www.w3schools.com/jsref/prop_video_duration.asp

  7. #7
    @U235
    Devo precisare che la pagina asp citata (quella che popola il database e dovrebbe calcolare la durata dei file MP4) viene lanciata da un servizio abbinato all'hosting. Tale servizio ha queste caratteristiche :
    Tramite la funzione Cron Job è possibile pianificare l'esecuzione di una pagina web (o di un URL) presente nel proprio piano hosting, sia su base oraria che giornaliera.
    L'idea di far lavorare ancora un po' il raspberry è senz'altro interessante ma non vedo come costui possa memorizzare la durata su un MDB che risiede su un server windows.
    Circa la "arzigogolatura" convengo con te ma devi tener conto che il tutto è nato senza uno studio preventivo, con limitate capacità informatiche, capacità che sono via via aumentate a mano a mano che il progetto procedeva in modo appunto contorno, non ottimale, arzigogolato.
    Ultima modifica di giustavalla; 14-03-2023 a 19:48

  8. #8
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Quote Originariamente inviata da giustavalla Visualizza il messaggio
    ...Tale servizio ha queste caratteristiche...
    Fossi in te proverei... da quel che ricordo viene solo chiamato un url, ma non viene elaborato il suo contenuto, quindi non viene eseguito nessun javascript, a meno che non lanci un browser con l'url come parametro come detto nel post precedente. Comunque visto che parlano di "esecuzione" della pagina web in teoria dovrebbe essere eseguito anche il javascript, ma dubito che sia così...
    Quote Originariamente inviata da giustavalla Visualizza il messaggio
    L'idea di far lavorare ancora un po' il raspberry è senz'altro interessante ma non vedo come costui possa memorizzare la durata su un MDB che risiede su un server windows.
    Basta predisporre sul server delle webapi apposite. Non ricordo se si possa creare qualcosa di simile alle webapi con ASP Classic, ma sicuramente puoi predisporre delle pagine che ricevono dati via post (le pagine che vengono solitamente chiamate dai form html) che accolgono i tuoi dati provenienti dal raspberry. Ovviamente dovrai elaborare i dati direttamente nel raspberry per poi inviarli al server secondo le modalità che avrai predisposto.

    Quote Originariamente inviata da giustavalla Visualizza il messaggio
    Circa la "arzigogolatura" convengo con te ma devi tener conto che il tutto è nato senza uno studio preventivo, con limitate capacità informatiche, capacità che sono via via aumentate a mano a mano che il progetto procedeva in modo appunto contorno, non ottimale, arzigogolato.
    Non era certamente mia intenzione offendere o giudicare, cercavo solo di indicarti una strada che potrebbe risultare più semplice. Sicuramente una strada che potrebbe portarti nuove "conoscenze".
    Ultima modifica di U235; 14-03-2023 a 20:56

  9. #9
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Ciao giustavalla,
    il giro che fai mi pare un po' "arzigogolato", in realtà si potrebbero usare tecniche diciamo un pò diverse per ottenere quello che vuoi, ma comprendo benissimo (e apprezzo) la tua creatività. Però stai andando ad incastrarti... se usi cron dovresti lanciare un processo del browser con url come parametro (diversamente puoi usare una web api, ma scordati di riuscire ad elaborare html e javascript), e lasciare che il browser poi faccia le elaborazioni lato client che vorresti fare, una volta rinviati i dati elaborati al server (durata del video ecc.) dovresti anche chiudere il processo aperto. Ovviamente questo non va d'accordo con il concetto di hosting, soprattutto se condiviso, e senza neppure considerare la poca "stabilità" di tutto il sistema.
    Non so se con ASP Classic si possa "elaborare" il video senza librerie di terze parti, ma credo che quello detto da Vincent.Zeno sia corretto, in ogni caso per installare librerie di terze parti torniamo sempre al concetto che devi avere il controllo del server. Una possibile soluzione a questo potrebbe essere cambiare linguaggio lato server, ma dipende sempre da cosa offre il servizio in hosting e soprattutto dalle tue conoscenze (presenti o "future"). Ma la soluzione migliore sarebbe quella di andare alla fonte, ovvero il raspberry, quindi evitare che vengano "processati" o comunque inviati i filmati che non rispondono ai criteri che hai stabilito (es: durata del video). Quindi la domanda è: "come mai non agisci direttamente sul raspberry?". La risposta penso di poterla immaginare, se non lo hai fatto forse hai bisogno di aiuto su quello, piuttosto che per trovare un ulteriore "workarund".
    Ultima modifica di U235; 14-03-2023 a 19:39

  10. #10
    un volta letto il dato, puoi sempre salvarlo nel DB con una procedura separata.
    Ed è proprio qui che mi fermo.
    Dal post di KillerWork deduco l'esistenza di una istruzione
    vid.onloadedmetadata
    che, se ho capito bene, evita di caricare il video ma legge solo i suoi metadati.
    Ma come mettere insieme il tutto ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.