Visualizzazione risultati 1 fino 9 di 9

Discussione: Utilizzo webcam FTP per condividere video in diretta su sito

  1. #1
    simonicco non è connesso Utente AlterBlog
    Data registrazione
    02-12-2020
    Messaggi
    15

    Predefinito Utilizzo webcam FTP per condividere video in diretta su sito

    Buongiorno a tutti,
    ho provato a cercare uns soluzione al mio quesito nelle discussioni nel forum, ma non sono riuscito a trovare nulla che facesse al caso mio. In caso ci sia qualcosa potete linkarmela tranquillamente.

    Ho creato il seguente sito per trasmettere in diretta i valori della mia stazione meteo e l'immagine della mia webcam: https://simonicco.altervista.org/
    E' molto grezzo, l'ho fatto parecchio tempo fa, ma in pratica nella pagina principale ci sono 5 principali pulsanti:
    - dashboard Meteotemplate, versione desktop
    - dashboard Meteotemplate, versione mobile
    - dashboard Wheather34
    - immagine webcam
    - informazioni su come creare il sito

    Quello che vorrei andare a migliorare è l' "immagine webcam".
    Al momento via FTP si carica un'immagine sul server ogni minuto (mi pare), e ogni volta che si ricarica la pagina tutte le immagini vecchie vengono eliminate. Ciò significa che molto spesso (se la pagina non viene aperta da nessuno per un po') ho la memoria piena è aprendo il link non viene visualizzato nulla finchè non si genera la nuova immagine.
    Mi piacerebbe dunque trovare un metodo per trasmettere il video della cam in diretta (o un'immagine che si aggiorna continuamente ad ogni secondo insomma), così da superare alcuni problemi come il riempimento della memoria del server.

    Innanzitutto, è un qualcosa che si può fare?
    Se sì, potete aiutarmi a raggiungere questo obiettivo?

    Alcune info:
    - utilizzo una IP CAM Foscam G4P
    - trasmetto le immagini attraverso FTP sul server, accedendo tramite FileZilla

    Se avete bisogno di altre informazioni ditemi pure.

    Grazie.
    Matteo.

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,188

    Predefinito

    Citazione Originalmente inviato da simonicco Visualizza messaggio
    e ogni volta che si ricarica la pagina tutte le immagini vecchie vengono eliminate
    Io come problema vedo questo.

    Se forzi il caricamento ogni secondo, rischi di terminare la banda dopo poco tempo: se un utente lascia attiva la schermata del tuo sito e il sito carica una immagine al secondo, consumerai troppa banda per nulla.

    Valuta tu se vuoi velocizzare il caricamento delle immagini, ma a mio avviso il problema principale è che ad ogni visita, tutte le immagini vengono eliminate.

    Immagino ci sia uno script PHP che provveda ad eliminare tutte le immagini, se non sei esperto di PHP, puoi indicarci qui il codice? La soluzione sarebbe eliminare tutte le immagini tranne la più recente, se non è la webcam stessa a poter caricare il file immagine dello stesso nome, quindi sovrascrivere l'immagine con la più recente. In questo caso ci sarebbe poi il problema della cache, risolvibile con un parametro random get nell'URL dell'immagine.

    Ciao!

  3. #3
    simonicco non è connesso Utente AlterBlog
    Data registrazione
    02-12-2020
    Messaggi
    15

    Predefinito

    Secondo il tuo feedback, se non è possibile effettuale un reale streaming in qualche modo, mi basterebbe
    - caricare un'immagine ogni 5 secondi tramite FTP: questo posso farlo da solo mi pare, verifico
    - cancellare tutte le immagini in cartella nel server ogni 60 secondi, eccetto l'ultima caricata: quindi mi servirebbe uno script che faccia ciò (non sono esperto di PHP)

    Appena torno a casa controllo ogni quanto posso caricare una nuova immagine e vi condivido lo script attuale ed alcune altre info.

    Grazie per l'aiuto :)

  4. #4
    simonicco non è connesso Utente AlterBlog
    Data registrazione
    02-12-2020
    Messaggi
    15

    Predefinito

    Ecco qua lo script.
    Codice PHP:
    <?php
    //http://www.meteospinaceto.it/
    header("Refresh: 60; url=" . $_SERVER["PHP_SELF"]);


    // prepara l'array per i nomi dei file
    $directory = array();

    // prepara l'handler per la directory
    $handler = opendir('../snap');

    // apre la directory e legge i singoli nomi dei file
    while ($file = readdir($handler)) {

    // se il nome del file contiene il testo iniziale imposto dalla ipcamera lo mette nell'array
    if (substr("$file", 0, 8) == "Schedule") {
    $directory[] = $file;
    }

    }

    // chiude l'handler
    closedir($handler);

    // ordina la lista dei file per nome (il piu' nuovo sara' l'ultimo)
    sort($directory);

    // conta i file
    $fileCount = count($directory);

    // copia il file piu' nuovo in webcam.jpg
    // $index corrispondera' all'ultimo elemento dell'array (il primo e' 0)
    $index = $fileCount - 1;
    $fileDaCopiare = $directory[$index];
    copy($fileDaCopiare, 'webcam.jpg');


    // cancella tutti i file i cui nomi sono nell'array
    for($index=0; $index < $fileCount; $index++) {
    $fileDaCancellare = $directory[$index];
    unlink($fileDaCancellare);
    }

    $nome_immagine="webcam.jpg"; // file contenente l'immagine
    $nome_testo="testo.txt"; // file contenente le scritte

    $fp = fopen($nome_testo,"r")
    or die(
    "impossibile aprire il file testo.txt.");
    $testo_sinistra=fgets($fp,100); // nella prima riga la scritta allineata a sinistra
    $testo_destra=fgets($fp,100); // nella seconda riga la scritta allineata a destra
    if ( $testo_destra = "data" )
    {
    setlocale(LC_TIME,"it_IT");
    $testo_destra=strftime ("%a %d %b %Y %H:%M:%S", filemtime($nome_immagine));
    }
    fclose($fp);

    header("Content-type: image/png");
    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");

    $im = imagecreatefromjpeg($nome_immagine);
    //$black = imagecolorallocate($im, 0, 0, 0);
    //$white = imagecolorallocate($im, 255, 255, 255);
    $colore_barra = imagecolorallocate($im, 153, 102, 51); // colore della barra formato RGB
    $colore_testo = imagecolorallocate($im, 255, 255, 255); // colore per testo
    $x=imagesx($im);
    $y=imagesy($im);

    $font = "VeraBd.ttf";
    $size = 10; // dimensione del testo
    $altezza_barra = 25; // dimensione della barra


    imagefilledrectangle($im, 0, $y-$altezza_barra, $x-1, $y-1, $colore_barra);

    $bbox = imagettfbbox ($size, 0, $font, $testo_sinistra);
    $dy = (($bbox[1] - $bbox[7]) / 2);
    imagettftext($im, $size, 0, 5, $y-($altezza_barra / 2) + $dy - 1, $colore_testo, $font, $testo_sinistra);

    $bbox = imagettfbbox ($size, 0, $font, $testo_destra);
    $dx = ($bbox[2] - $bbox[0]);
    imagettftext($im, $size, 0, $x-5-$dx, $y-($altezza_barra / 2) + $dy - 1, $colore_testo, $font, $testo_destra);

    $info = getimagesize($nome_immagine); //carica immagine
    //$logo = imagecreatefrompng("logo1.png") ; //carica 1° logo - h/= cartella - logo1.png = nome del file e estensione.png
    //$logo2 = imagecreatefrompng("logo2.png") ; //carica 2° logo - h/= cartella - logo2.png = nome del file e estensione.png
    //$logo3 = imagecreatefrompng("logo3png") ; //carica 3° logo - h/= cartella - logo3.png = nome del file e estensione.png
    //imagecopy($im, $logo, 0, $info[1]-165, 0, 0, 181, 140); //posizione 1°logo(da sx= 5$logo, 1610 ,sposta dal fondo= -0,sposta da sinistra= 0)dimensione 1°logo(300=larghezza area assegnata,230=altezza area assegnata)
    //imagecopy($im, $logo2, 5, $info[1]-150, 0, 0, 150,38); //posizione 2°logo(da sx= 700 ,dal fondo= -65)dimensione 2°logo(156=larghezza ,38=altezza )
    //imagecopy($im, $logo3, 5, $info[1]-210, 0, 0, 150,53); //posizione 3°logo(da sx= 865, dal fondo= -80)dimensione 3°logo(150=larghezza ,53=altezza )
    //Help//$logo, 0 Variare il valore 0 per spostare dal fondo verso l'alto
    //Help//$info[1]-165 Fa scendere o salire il logo+zona assegnata
    //Help//0 Sposta a dx dentro alla zona assegnata
    //Help// 0 Sposta in alto dentro alla zona assegnata
    //Help// 181 Definisce la larghezza della zona assegnata
    //Help// 140 Definisce l'altezza della zona assegnata

    imagepng($im);
    imagedestroy($im);

    ?>
    Ultima modifica di alemoppo : 19-02-2024 alle ore 20.53.15 Motivo: +tag [php]

  5. #5
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,188

    Predefinito

    Il codice copia l'immagine più recente dalla cartella "snap" e lo chiama "webcam.jpg". Poi elimina tutte le immagini in "snap".

    Se però non ci sono immagini, non deve copiare nulla in "webcam.jpg", altrimenti si rischia di non poter mostrare nulla. Io farei un controllo: se non c'è alcuna nuova immagine, non genererei una nuova immagine "webcam.jpg" ma lascerei quella vuota. Quindi:

    Codice PHP:
    <?php
    //http://www.meteospinaceto.it/
    header("Refresh: 60; url=" . $_SERVER["PHP_SELF"]);


    // prepara l'array per i nomi dei file
    $directory = array();

    // prepara l'handler per la directory
    $handler = opendir('../snap');

    // apre la directory e legge i singoli nomi dei file
    while ($file = readdir($handler)) {

    // se il nome del file contiene il testo iniziale imposto dalla ipcamera lo mette nell'array
    if (substr("$file", 0, 8) == "Schedule") {
    $directory[] = $file;
    }

    }

    // chiude l'handler
    closedir($handler);

    // ordina la lista dei file per nome (il piu' nuovo sara' l'ultimo)
    sort($directory);

    // conta i file
    $fileCount = count($directory);
    if(
    $fileCount > 0)
    {
    // copia il file piu' nuovo in webcam.jpg
    // $index corrispondera' all'ultimo elemento dell'array (il primo e' 0)
    $index = $fileCount - 1;
    $fileDaCopiare = $directory[$index];
    copy($fileDaCopiare, 'webcam.jpg');


    // cancella tutti i file i cui nomi sono nell'array
    for($index=0; $index < $fileCount; $index++) {
    $fileDaCancellare = $directory[$index];
    unlink($fileDaCancellare);
    }
    }

    $nome_immagine="webcam.jpg"; // file contenente l'immagine
    $nome_testo="testo.txt"; // file contenente le scritte

    $fp = fopen($nome_testo,"r")
    or die(
    "impossibile aprire il file testo.txt.");
    $testo_sinistra=fgets($fp,100); // nella prima riga la scritta allineata a sinistra
    $testo_destra=fgets($fp,100); // nella seconda riga la scritta allineata a destra
    if ( $testo_destra = "data" )
    {
    setlocale(LC_TIME,"it_IT");
    $testo_destra=strftime ("%a %d %b %Y %H:%M:%S", filemtime($nome_immagine));
    }
    fclose($fp);

    header("Content-type: image/png");
    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");

    $im = imagecreatefromjpeg($nome_immagine);
    //$black = imagecolorallocate($im, 0, 0, 0);
    //$white = imagecolorallocate($im, 255, 255, 255);
    $colore_barra = imagecolorallocate($im, 153, 102, 51); // colore della barra formato RGB
    $colore_testo = imagecolorallocate($im, 255, 255, 255); // colore per testo
    $x=imagesx($im);
    $y=imagesy($im);

    $font = "VeraBd.ttf";
    $size = 10; // dimensione del testo
    $altezza_barra = 25; // dimensione della barra


    imagefilledrectangle($im, 0, $y-$altezza_barra, $x-1, $y-1, $colore_barra);

    $bbox = imagettfbbox ($size, 0, $font, $testo_sinistra);
    $dy = (($bbox[1] - $bbox[7]) / 2);
    imagettftext($im, $size, 0, 5, $y-($altezza_barra / 2) + $dy - 1, $colore_testo, $font, $testo_sinistra);

    $bbox = imagettfbbox ($size, 0, $font, $testo_destra);
    $dx = ($bbox[2] - $bbox[0]);
    imagettftext($im, $size, 0, $x-5-$dx, $y-($altezza_barra / 2) + $dy - 1, $colore_testo, $font, $testo_destra);

    $info = getimagesize($nome_immagine); //carica immagine
    //$logo = imagecreatefrompng("logo1.png") ; //carica 1° logo - h/= cartella - logo1.png = nome del file e estensione.png
    //$logo2 = imagecreatefrompng("logo2.png") ; //carica 2° logo - h/= cartella - logo2.png = nome del file e estensione.png
    //$logo3 = imagecreatefrompng("logo3png") ; //carica 3° logo - h/= cartella - logo3.png = nome del file e estensione.png
    //imagecopy($im, $logo, 0, $info[1]-165, 0, 0, 181, 140); //posizione 1°logo(da sx= 5$logo, 1610 ,sposta dal fondo= -0,sposta da sinistra= 0)dimensione 1°logo(300=larghezza area assegnata,230=altezza area assegnata)
    //imagecopy($im, $logo2, 5, $info[1]-150, 0, 0, 150,38); //posizione 2°logo(da sx= 700 ,dal fondo= -65)dimensione 2°logo(156=larghezza ,38=altezza )
    //imagecopy($im, $logo3, 5, $info[1]-210, 0, 0, 150,53); //posizione 3°logo(da sx= 865, dal fondo= -80)dimensione 3°logo(150=larghezza ,53=altezza )
    //Help//$logo, 0 Variare il valore 0 per spostare dal fondo verso l'alto
    //Help//$info[1]-165 Fa scendere o salire il logo+zona assegnata
    //Help//0 Sposta a dx dentro alla zona assegnata
    //Help// 0 Sposta in alto dentro alla zona assegnata
    //Help// 181 Definisce la larghezza della zona assegnata
    //Help// 140 Definisce l'altezza della zona assegnata

    imagepng($im);
    imagedestroy($im);

    ?>
    Infine, il codice ha un errore. Se però il funzionamento dello script fa quel che vuoi, non lo toccherei.
    In particolare, la riga strana è:
    Codice PHP:
    if ( $testo_destra = "data" )
    che invece dovrebbe essere:
    Codice PHP:
    if ( $testo_destra == "data" )
    Lasciandola invece come è adesso, qualsiasi cosa scriverai nel file "testo.txt" non verrà utilizzato per "$testo_destra", ma mostrerà sempre e solo la data.

    Ciao!

  6. #6
    simonicco non è connesso Utente AlterBlog
    Data registrazione
    02-12-2020
    Messaggi
    15

    Predefinito

    Perdona l'ignoranza, ma avendo aggiunto l'IF risolvo il problema di riempimento dello spazio del server?
    Perchè, da quello che capisco io, lo script eliminerà le immagini in "snap" solo quando verrà ricaricata la pagina web? O sbaglio?

    Il mio problema è che se nessuno apre la pagine web per alcuni giorni, la cartella "snap" si riempi di immagini, e va a saturarmi lo spazio nel server.

  7. #7
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,188

    Predefinito

    Ah no, finché qualcuno non richiama lo script, non verranno eliminati i file. In generale non è possibile eseguire delle azioni sul server temporizzate (se non con cron, ma è un servizio a pagamento).

    La webcam non ha una funzionalità di cancellazione immagini? O comunque visitare una pagina o cosa simile?

    Ciao!

  8. #8
    simonicco non è connesso Utente AlterBlog
    Data registrazione
    02-12-2020
    Messaggi
    15

    Predefinito

    La webcam è la IP CAM Foscam G4P, non ho trovato un modo per eliminare le immagini, ma non sono molto esperto, non so se qualuno può farmi una mano in questo.

  9. #9
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,188

    Predefinito

    Ho letto il manuale ed effettivamente non ho trovato la possibilità di caricare l'immagine con lo stesso nome.

    Purtroppo temo che più di così non si possa fare.

    Ciao!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •