CREARE UN PROPRIO SERVER PER IL VIDEO STREAMING

Durante una manifestazione organizzata nel mio Istituto è nata l’esigenza di fare uno streaming che trasmettesse le immagini video delle riprese fatte da un drone.  Poiché  il collegamento ad Internet dell’Istituto non era molto performante, rendendo così impossibile indirizzare una live verso facebook, youtube o altri server, ho deciso di creare un server in grado di gestire il protocollo RTMP (Real Time Messaging Protocol)  che permettesse lo streaming  in locale.

Di seguito la soluzione e gli strumenti utilizzati:

La prima scelta è stata quella di utilizzare Virtualbox (un software di virtualizzazione in grado di creare delle macchine virtuali sulle quali far girare il sistema operativo che preferiamo).

Per installare Virtualbox è sufficiente fare il download dell’applicazione dal sito https://www.virtualbox.org/ e procedere all’installazione.

Dopo aver installato Virtualbox, ho scaricato una iso di ubuntu server dal sito https://www.ubuntu-it.org/ .

A questo punto ho avviato virtualbox e dopo aver cliccato sul pulsante “Nuova”, ho proceduto alla creazione di una macchina in cui girasse il server linux ubuntu.

Come impostazioni della scheda di rete virtuale del server ho utilizzato quelle mostrate dall’immagine che segue. Inoltre ho assegnato alla scheda di rete, durante l’installazione di ubuntu, ma lo si può fare anche dopo, un  ip statico appartenente alla mia sottorere (nel mio caso 192.168.1.233).

Avviata la macchina virtuale, dopo essermi autenticato, ho proceduto all’installazione del server web Nginx e delle librerie necessarie per supportare il protocollo RTMP, di seguito i comandi utilizzati:

sudo apt update

(comando per aggiornare la lista dei pacchetti disponibili nei repository elencati nel file /etc/apt/sources.list)

sudo apt install nginx

(comando per installare il web server Nginx)

sudo add-apt-repository universe

(comando per aggiungere al file /etc/apt/sources.list  i repositories universe in cui si trovano pacchetti necessari per il nostro scopo)

sudo apt update

(aggiorniamo ancora la lista dei pacchetti)

sudo apt install libnginx-mod-rtmp

(installiamo la libreria che contiene il modulo per gestire il protocollo rtmp)

Procediamo ora a configurare adeguatamente il nostro server, quindi editiamo, utilizzando  un editor a nostra scelta (io ho usato nano) ,  il file di configurazione di Nginx mediante il comando

sudo nano /etc/nginx/nginx.conf

Posizioniamoci alla fine del file e aggiungiamo le righe seguenti:

rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application live {
                        live on;
                        record off;
                }
        }
}

Prestare Particolare attenzione alla riga application  live, perché live farà parte dell’URL associata allo streaming.

Riavviare ora il server Nginx, affinché possa riconoscere i cambiamenti di configurazione fatti, utilizzando il comando seguente:

sudo systemctl restart nginx

A questo punto il nostro server è in grado di accettare lo streaming, ma ora ci serve un software di streaming, io ho scelto OBS (Open Broadcast Studio), potete scaricarlo a questo indirizzo https://obsproject.com/.

Avviamolo e clicchiamo in basso a destra su impostazioni, poi sulla nuova finestra clicchiamo su Dirette, il pulsante si trova nella parte sinistra, a questo punto nella pagina centrale effettuiamo le scelte seguenti:

Servizio:  Personalizzato

Server: rtmp://192.168.1.233/live  ( al posto di 192.168.1.233 occorre inserire l’ip che ciascuno di noi ha assegnato al server ubuntu )

Codice delle dirette: quello che si desidera, per esempio  francesco

Confermiamo  il tutto, prepariamo con obs la nostra diretta e avviamola.

Ora per vedere la diretta, da qualunque postazione in rete, è sufficiente avviare il lettore multimediale VLC, che è possibile scaricare da https://www.videolan.org/, cliccare su Media>apri flusso di rete e digitare l’url  rtmp://indirizzo_server_installato/live/codice_diretta , nel mio caso rtmp://192.168.1.233/live/francesco  

Lo streaming a questo punto sarà fruibile dalla nostra rete locale.


Video Guida

17 Comments to “CREARE UN PROPRIO SERVER PER IL VIDEO STREAMING”

  1. Ottima Guida! Se cerchi dei server professionali per aumentare i tuoi ascoltatori in contemporanea con banda dedicata puoi trovare un server video professionale su https://azotosolutions.com

  2. Buonasera,
    sto tentando di metter su un server video e, durante la mia cerca, ho trovato il suo tutorial.
    L’ho eseguito tutto, passo passo, fino a lanciare putty che purtroppo riporta “connection refused”.
    Ho provato il ping dalla macchina virtuale, ma l’indirizzo che pingo è unreachable. nel dettaglio, io pingo il 192.168.1.0.
    L’ ipv4 impostato sulla virtuale è 192.168.1.105, la subnet mask è 255.255.255.0.
    Quando li ho impostati nella macchina virtuale, ho inserito gli stessi valori del pc su cui lancio virtualbox.
    Cosa ho sbagliato? Può aiutarmi per favore?

    Grazie.

    1. dimenticavo! il mio pc è un laptop connesso ad internet tramite wifi.

    2. Hai settato la scheda di rete della macchina virtuale come scheda con bridge?
      Inoltre, non puoi pingare il 192.168.1.0 perchè non può essere l’indirizzo di una macchina, ma indica la sottorete.
      Prova dal pc a pingare la macchina virtuale ping 192.168.1.105.
      Nell’articolo davo per scontato che sulla macchina server fosse già installato il server openssh, senza di questo putty non si collega.
      Controlla queste cose, se non hai installato openssh e hai difficoltà fammelo sapere che ti do indicazioni su come fare.
      A presto.

      1. Ciao e grazie 1000 della disponibilità!!!
        Invio informazioni più precise:

        Macchina HOST:
        IP 192.168.1.105
        SUBNET MASK 255.255.255.0
        DEFAULT GATEWAY 192.168.1.1

        Macchina VIRTUALE:
        INET 192.168.1.105/24 BRD 192.68.1.255

        DALLA VIRTUALE:
        ping 192.168.1.105 funziona correttamente
        ping 192.168.1.1 unreachable

        DALLA HOST:
        OpenSSH installato (da manage optional features)
        putty: “network error: connection refused” sia per 192.168.1.1 sia per 192.168.1.105 (porta 22)

  3. rileggendo, mi sono accorta che avevo assegnato lo stesso ip della host alla virtuale!!!

    Grazie ancora per la disponibilità! Procedo con il resto del video!

    1. Grazie a te e buona visione.

      1. sto tentando di connettermi al serve tramite la camera di un drone inserendo rtmp://192.168.1.233/live/francesco, ma non si connette, perché?
        Grazie

        1. si connette, su vlc vedo che parte il timer, ma non visualizza il video…

          1. Ho pochi elementi su come hai configurato il tutto, per darti una risposta esaustiva. Quello che posso assicurarti è che il server funziona, infatti lo uso spesso per vedere le partite streammando sul server creato con obs e poi usando vlc sulla mia TV, richiamando l’indirizzo rtmp://192.168.1.233/live/francesco.
            Controlla le varie configurazioni, soprattutto gli indirizzi assegnati e inoltre che non ci sia qualche firewall che ti crei il problema.
            Grazie per la lettura

  4. Buonasera Francesco e complimenti per la chiarezza con cui hai spiegato tutto.
    Se volessi pubblicare il server, ossia riuscire a vedere lo streaming prodotto da una videocamera al di fuori della mia rete, quali sarebbero i passi da percorrere?

    1. Per rendere visibile il server che hai creato all’esterno, una soluzione sarebbe possedere un ip statico e configurare sul tuo router un NAT che quando riceve una richiesta dall’esterno sul tuo ip e sulla porta in cui il tuo server è in ascolto (tipicamente la 1935), la trasli all’ip della tua LAN assegnato al server (questo tipo di NAT viene detto DNAT destination nat).
      Un’altra possibilità molto semplice, per rendere il tuo server accessibile dall’esterno, è quella di creare un tunnel tra la tua rete e Internet, un programma utile che fa questo, scaricabile gratuitamente, si chiama ngrok e lo trovi qui:
      https://ngrok.com/

      1. usando ngrok, ottengo un forwarding address del tipo https://xxxxxxx.ngrok.io
        per vedere la diretta, usando i parametri definiti nel tutorial, digito nel browser https://xxxxxxx.ngrok.io/live/fchiriaco ma ottengo “502 Bad Gateway
        The server returned an invalid or incomplete response”. Cosa mi sono perso?

      2. Buongiorno Francesco.
        Ho installato ngrok e l’ho lanciato sulla 1935 che è la porta specificata in nginx.conf per live.
        Mi vengono restituiti due forwarding http://abcdefgh.ngrok.io e https://abcdefgh.ngrok.io.
        Apro OBS e, in settings, nel tab Stream, imposto Server=https://abcdefgh.ngrok.io/live e key=lkjhgf.
        quando lancio “start streaming”, il tentativo di connessione fallisce: “make sure you’ve configured a valid streaming service and no firewall is blocking the connection”. Hai qualche suggerimento?

        Grazie.

  5. se lancio ngrok sulla 80, inserendo il forwarding nel browser, riesco a connettermi alla pagina nginx con successo, ma obs continua a dare loo stesso errore.

    ti allego il dettaglio del netstat:

    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN 2171/nginx: master
    tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2171/nginx: master
    tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 620/systemd-resolve
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 713/sshd
    tcp 0 0 127.0.0.1:4040 0.0.0.0:* LISTEN 3198/ngrok
    tcp6 0 0 :::80 :::* LISTEN 2171/nginx: master
    tcp6 0 0 :::22 :::* LISTEN 713/sshd
    udp 0 0 127.0.0.53:53 0.0.0.0:* 620/systemd-resolve

    1. Ciao, cerco di spiegarti i passi che devi fare con ngrok.
      Innanzitutto devi installare ngrok sul server linux dove gira nginx.
      Poi vai col browser sulla pagina di ngrok e in alto a destra registrati (gratuitamente), ti serve perché devi usare un comando che abilita una porta diversa da http.
      Una volta che hai creato l’account, nella tua dashboard ci sono dei riquadri, in particolare ti serve quello dell’authtoken, copia la riga senza il punto iniziale e lo slash e digita il comando seguente:
      ngrok authtoken 152536fdfsdfsfs (ovviamente i caratteri che seguono authtoken nel tuo caso saranno diversi in quanto collegati al tuo account, io ho usato caratteri inventati).
      Su OBS lascia la configurazione invariata ad esempio:
      rtmp://192.168.1.233/live e con codice diretta ad esempio francesco
      Adesso lancia sul server linux il comando seguente:
      ngrok tpc 1935
      Ti comparirà un indirizzo tipo:
      tcp://0.tcp.ngrok.io:18808
      Apri vlc e nel flusso di rete
      scrivi l’indirizzo che ti è comparso cambiando il protocollo tcp in rtmp e aggiungendo alla fine live/francesco o altro se nel tuo caso hai usato un altro codice diretta…esempio di indirizzo:
      rtmp://0.tcp.ngrok.io:18808/live/francesco
      Ricordati di cambiare nella stringa che ti ha restituito ngrok il protocollo tcp in rtmp.
      Fammi sapere se funziona.

  6. Grazie del supporto, funziona.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *