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

32 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.

  7. Ciao Francesco interessante guida ma come faccio se invece compro un server magari su aruba? Dopo aver inatallato il tutto come lo raggiungo?

    1. Ciao Grazie. Se acquisti un hosting non puoi fare niente, in quanto non hai la possibilità di cambiare la configurazione del server in maniera così netta, se invece acquisti la gestione completa di un server tipo un housing o altre modalità che ti danno la possibilità di gestirlo totalmente, allora dovresti seguire gli stessi passaggi della guida con l’ulteriore vantaggio di avere un ip pubblico e/o un nome di dominio associato. Ovviamente la seconda soluzione è molto costosa.

      1. Lo potrei prendere su contabo. Solo che vorrei aver possibilità di farmi una chiacchierata con te perchè vorrei spiefarti il mio problema. Ti lascio la mia mail se magari vuoi contattarmi anche in giornata dato che siamo in quarantena forzata vista l emergenza. Frcatania@gmail.com

  8. mi chiedevo se una persona volesse usare una pagina google al posto di OBS come una sorta di web chiamata o trovato tanti argomenti ma in swf a me servirebbe javascript & html5, qualche idea ?

  9. Ciao Francesco.. ho letto e seguito tutta la tua guida.. sei stati chiarissimo.. una sola domanda:
    – Se io avessi bisogno di un flusso rtsp basta è sufficiente sostituire rtmp con rtsp?
    In poche parole uso un programma per ipad e potrei aggiungere un flusso video in rtsp.. vorrei inviarglielo tramite mac.. e sto impazzendo per riuscirci
    Grazie

    1. l’app dell’ipad (live:air action) puo anche utilizzasre come stream protoco MPEG-TS nelle varianti UDP ,TCP, TCP,Pull, il problema che mi sto creando è riuscire attraverso obs mandare un flusso all’ipaf

    2. Scusa il ritardo, ma è un periodo un po’ particolare e molto impegnativo per me.
      Con la procedura che ho descritto non credo, non so se hai provato a farlo.

  10. Ciao Francesco, complimenti per la spiegazione.. ho una domanda: Vorrei usare questo tuo procedimento per poter sfruttare il flusso video e utilizzarlo con un app per dei live su un iPad (situato nella stessa rete).
    L’app si chiama live:air Action, e mi richiede un flusso RTSP e non RTMP (con i protocollo UDC o TCP o HTTP), oppure un flusso MPEG-TS (con i protocolli UDP, TCP o TCP-Pull), come potrei sfruttare il tutto in modo da poter tramite OBD inviare questo flusso?
    Spero essere stato chiaro.
    Grazie,
    Ruben

    1. Grazie, Io mi sono appoggiato ad un server nginx che supporta RTMP mediante l’installazione della libreria libnginx-mod-rtmp, dovresti vedere se esiste una libreria per RTSP. Se esiste non sarebbe un problema, basterebbe seguire la stessa procedura.

  11. Ciao francesco,
    Scusa la domanda ignorante ma da che tipo di computer fisico sei partito per realizzare questo progetto? Con un Windows 10pro e virtualizzando tutto il tuo processo, riuscirei a realizzare il tuo progetto? La linea internet che ho è una fibra Fastweb

    1. Va benissimo anche io ho seguito questo percorso windows 10 pro, il sever invece è una macchina linux Ubuntu server virtualizzata su Virtualbox. Penso che con la tua fibra non avrai problemi

  12. Ciao, complimenti per la guida; vorrei realizzare un server per mettere on line il flusso live di una webcam; sarei orientato sul noleggio di un server virtuale, sapresti consigliarmi che caratteristiche minime hardware dovrebbe avere la macchina virtuale per far girare ubuntu+nginx? ci sono diverse configurazioni ma non saprei quale scegliere tra queste… https://www.cloud.it/vps/vps-hosting.aspx

  13. Grazie Mille ottima guida , funziona tutto alla perfezione, compreso ngrok per uscire all’esterno, seguendo le tue impostazioni, chiaramente bisogna lasciarlo in esecuzione su putty altrimenti chiude la connessione , mi stavo chiedendo se su obs con la funzione browser si possa ricevere un flusso rtmp….

  14. salve volevo un informazione , ma in questo modo se io voglio fare vedere la mia diretta, da altri utenti che non si trovano collegati alla mia rete si può fare?

    1. Se hai un ip fisso è comodissimo, ti basta settare nel router un nat alla porta 1935.
      Se non hai un ip fisso ngrok può aiutarti. Se leggi i commenti precedenti trovi come fare con ngrok,

Lascia un commento

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