Come creare un server RTMP

Se siete interessati a creare un server RTMP per ricevere i video trasmessi dalla vostra telecamera o dal vostro smartphone si può utilizzare il server nginx.

Nginx è disponibile anche per windows 10 e si può scaricare a questo indirizzo: Index of /download/ (ecsds.eu).

Dall’elenco si può scegliere quello dal nome nginx 1.7.11.3 Gryphon.zip.

Le istruzioni per l’installazione sono molto semplici e si limitano a scompattare il file zip in un direttorio a scelta, come indicato al seguente sito: DJP – NGINX RTMP Streaming,

Da questa stessa pagina è possibile scaricare Il file nginx.conf da utilizzare come base di partenza. Tale file va copiato nel direttorio conf del server.

Nel file zip sono disponibili anche i due file start.bat e stop.bat che consentono di avviare e fermare il servizio e questi vanno copiati nel direttorio radice dell’installazione.

In sostanza, con nginx è possibile creare un server RTMP che rimanga in ascolto dei flussi da parte di una videocamera e questi flussi possono essere rediretti su altri canali RTMP (come per esempio diversi canali twitch oppure youtube) contemporaneamente.

Io ne farò un uso diverso: lo configurerò in modo da creare un canale hls che potrà essere interrogato da streamlabs, in modo da incanalare il flusso dallo smartphone verso streamlabs.

Infatti, qualunque smartphone android può essere trasformato in videocamera che invia flussi verso server RTMP. Per farlo è sufficiente installare l’app streamlabs dal playstore.

All’interno di streamlabs è necessario creare un collegamento rtmp indicando un URL come quello seguente: rtmp://localhost/show/stream. La porta utilizzata di default è la 1395, quindi si potrà operare anche da internet configurando il port forwarding su quella porta.

Così facendo, il server nginx convertirà il flusso in hls che sarà disponibile all’URL: http://localhost:8080/hls/stream.m3u8. Tale URL andrà impostato dentro streamlabs, attivando un canale “media source” e indicando tale URL come fonte. Ovviamente, essendo tipicamente il server nginx e streamlabs sullo stesso server, si potrà utilizzare l’indirizzo localhost.

Queste istruzioni sono fornite in maniera molto chiara anche al seguente indirizzo: Setting up HLS live streaming server using NGINX – Peer5 P2P Docs.

Il seguente pezzo di nginx.conf configura il servizio rtmp e indica di attivare il canale hls. A tale canale va indicato un path dove il server andrà a salvare i file temporanei che gli serviranno per la cache. Il direttorio hls_path dovrà esistere.

rtmp {
	server {
		listen 1935;
		chunk_size 4096;

		application live {
			live on;

			record off;
			# record all;
			# record_path /recordings;

			# To push to multiple locations, uncomment lines below and substitute in your RTMP URI and stream key
			# push rtmp://server/path/streamkey;
			# push rtmp://server/path/streamkey;

			# HLS options below
			hls on;
			hls_path c:/winapp/nginx/html/hls/;
			hls_fragment 3;
			hls_playlist_length 60;
			hls_continuous on;
		}
	}
}

Il seguente codice configura il server http attraverso il quale sarà disponibile il flusso hls:

http {
    sendfile off;
    tcp_nopush on;
    #aio on;
    directio 512;
    default_type application/octet-stream;

    server {
        listen 8080;

        location / {
            # Disable cache
            add_header 'Cache-Control' 'no-cache';

            # CORS setup
            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Expose-Headers' 'Content-Length';

            # allow CORS preflight requests
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain charset=UTF-8';
                add_header 'Content-Length' 0;
                return 204;
            }

            types {
                application/dash+xml mpd;
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }

            root c:/winapp/nginx/html/;
        }
    }
}

Reazioni avverse al vaccino covid

Riporto il link di AffariItaliani.it in cui si cita la totale non trasparenza dei vertici di AIFA a fornire spiegazioni sui dati delle reazioni avverse dei vaccini covid-19.

Dati in cui sono riportati, oltre alle segnalazioni di eventi avversi, anche decessi avvenuti dopo la vaccinazione (cosa che non dimostra una correlazione ma quasi…).

Aifa, 2 morti al giorno post vaccini. Ma i vertici non rispondono: è crisi – Affaritaliani.it

Perché il Green Pass è inutile

L’immunizzazione naturale è più efficace di quella derivata dal vaccino. Questo è un dato di fatto.

Per questo motivo, obbligare chi ha avuto il covid-19 a vaccinarsi con almeno una dose non solo è un contro senso ma è criminale.

Per lo stesso motivo, è criminale imporre l’obbligo del Green Pass per accedere a servizi pubblici e spostarsi da paese a paese.

Chiunque sia vaccinato, può trasportare il virus e contaminare allo stesso modo di chi non è vaccinato.

Harvard Epidemiologist Says the Case for COVID Vaccine Passports Was Just Demolished – Foundation for Economic Education (fee.org)

Il green Pass è solo un provvedimento liberticida.

Vedi https://www.ricominciamoavivere.org/humhub/index.php?r=content%2Fperma&id=81

NextCloud – aggiornamento elenco files di una cartella

Può capitare di caricare nuovi files all’interno delle cartelle dell’utente senza utilizzare l’interfaccia grafica di nextcloud.

In tal caso i contenuti della cartella non vengono aggiornati e nell’interfaccia si continuano a vedere solo i vecchi files.

Per aggiornare il contenuto, in tal caso è necessario eseguire il seguente comando:

sudo -u www-data php /var/www/html/nextcloud/occ files:scan –all

Scheda controller 6 assi per motori dc

DRIVER CONTROLLER SCHEDA PER MOTORI BRUSHLESS CON SENSORE HALL

CARATTERISTICHE
Tensione di alimentazione:
– scheda: 5 Vdc
– motore: da 5 a 36 Vdc
Corrente motore max. : 16 A
Potenza max: 350 watt
Regolazione della velocità: da 0-100%
Protezione: sovracorrente
Controllo inversione di fase: sì
Collegamenti:
MA/MB/MC: alle fasi del motore
5V e GND: alimentazione della scheda 5 VDC
VCC e GND: alimentazione principale del motore da collegare a un alimentatore esterno
Connettore tre pin 5V/VR (0-5V)/GND: al potenziometro esterno da 10 kohm incluso
PWM input: per la regolazione della velocità (se si utilizza l’ingresso PWM è necessario scollegare il potenziometro da VR)
Ha/Hb/Hc/+5V/GND: ingresso alimentazione e sensore Hall
SC( pin su scheda): uscita segnale impulsi di velocità
Dimensioni: 63x45x29 mm

Creare una estensione di Visual Studio

Scriverò un vademecum molto sintetico su come si può produrre un’estensione per l’ambiente di sviluppo di Visual Studio (2019), nonché per SQL Server Management Studio, entrambi basati sulla stessa infrastruttura di base.

Utilizzerò per lo sviluppo dell’estensione Visual Studio 2019 e cerchcerò di aggiornare l’interfaccia di SQL Management Studio versione 18.

In Visual Studio è necessario creare un nuovo progetto di tipo “Extensibility“.

Una volta all’interno del progetto è necessario disinstallare l’SDK 16 di Microsoft.VisualStudio.dll in quanto il management di SQL è implementato ancora con la vecchia interfaccia di Visual Studio 2017.

Per farlo si può andare nel menu strumenti e cliccare sugli strumenti nuget:

Nella maschera che si apre ci si dovrà assicurare di avere la versione 15:

In caso negativo si potrà installare al posto della 16.

A questo punto il compilatore è a posto e si può procedere con la creazione di un comando (nuova voce di menu). Per farlo è sufficiente selezionare il progetto e cliccare su Aggiungi nuovo elemento.

Nel menu scegliere Extensibility e successivamente Custom Command.

Il template genererà un insieme di classi, tra cui command1.cs, all’interno del quale vi è un metodo “Execute” che contiene il codice che verrà eseguito quando verrà selezionata la voce di menu:

    private void Execute(object sender, EventArgs e)
    {
        ThreadHelper.ThrowIfNotOnUIThread();
        string message = string.Format(CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", this.GetType().FullName);
        string title = "Command1";

        // Show a message box to prove we were here
        VsShellUtilities.ShowMessageBox(
            this.package,
            message,
            title,
            OLEMSGICON.OLEMSGICON_INFO,
            OLEMSGBUTTON.OLEMSGBUTTON_OK,
            OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
    }

In questo caso verrà semplicemente visualizzato un messaggio usando il metodo ShowMessageBox del framework.

Il menu all’interno del quale si presenta la nuova voce è indicato nel file che ha estensione .vsct, in particolare nel punto:

  <Group guid="guidHelloWorldSsmsExtensionPackageCmdSet1" id="MyMenuGroup" priority="0x0600">
    <Parent guid="guidSHLMainMenu" id="IDM_VS_MENU_TOOLS" />
  </Group>

il valore dell’id=”IDM_VS_MENU_TOOLS” indica al sistema che il parent della nuova voce di menu sarà il menu “Strumenti” dell’applicativo.

Prima di eseguire il debug della nuova estensione si deve configurare quale sarà l’eseguibile oggetto della modifica. Per fare questo di deve accedere alla schermata delle properties del progetto e scegliere la scheda “Debug”. Qui va indicato il path dell’eseguibile di SQL Management Studio:

Se non si procede con questa operazione la nuova voce di menu verrà assegnata ad una nuova istanza dell’ambiente di Visual Studio stesso, consentendo di aggiungere funzionalità allo stesso ambiente.

Per completare la procedura è necessario indicare dove andranno rilasciati i file di installazione dell’estensione, selezionando la scheda VSIX; nel caso di SQL SERVER questa cartella si trova in C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Extensions e andrà indicata nell’apposito spazio presente nella maschera:

Durante la compilazione, se dovesse presentarsi il messaggio d’errore

The VSIX manifest must contain element 'Prerequisites'

si dovranno aggiungere al file vsxmanifest le seguenti istruzioni:

  <Prerequisites>
    <Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[14.0,16.0]" />
  </Prerequisites>

Se ora si attiva il debug dell’applicazione, si dovrebbe aprire l’ambiente di SQL Studio con la nuova voce di menu nel menu strumenti. Ricordarsi di rieseguire il progetto di visual studio come amministratore, altrimenti il progetto non partirà.

Aggiunta del comando ad un menu contestuale

Per aggiungere il comando ad un altro menu dell’applicativo è necessario conoscerne il suo guid. Purtroppo gli id non sono ben documentati e quindi serve una scappatoia per determinarli a runtime.

Questo si può fare ed è ben documentato in questo link:

https://stackoverflow.com/questions/31759396/vsix-adding-a-menu-item-to-the-visual-studio-editor-context-menu/31769170#31769170

Una volta determinato il gUID e il CmdID, si possono aggiungere all’interno del file .vsct. In particolare andrà aggiunta tra i symbols la voce:

<GuidSymbol name="aspxContextCommandSet" value="{33F13AC3-80BB-4ECB-85BC-225435603A5E}">
  <IDSymbol name="aspxContextMenu" value="0x0070" />
</GuidSymbol>    

in cui il value di IdSymbol è il valore esadecimale del CmdID e il value del GuidSymbol rappresenta il gUID del menu.

Per completare è necessario aggiungere un gruppo:

  <Group guid="guidHelloWorldSsmsExtensionPackageCmdSet" id="MyMenuGroup" priority="0x0600">
    <Parent guid="aspxContextCommandSet" id="aspxContextMenu" />
  </Group>

in cui la voce Parent avrà il nome come indicato nel symbol.

A quel punto la nuova voce comparirà come per magia nel menu contestuale dello Studio.

Per completezza, è utile vedere quanto scritto in questa pagina ben costruita di codeproject:

https://www.codeproject.com/Articles/1377559/How-to-Create-SQL-Server-Management-Studio-18-SSMS