07

Jan

Registrare uno stream automaticamente - #2

Posted by muse as Linux, Streaming, Vlc

Per risolvere il problema riscontrato con il metodo descritto nel precedente post, ho deciso di ricorrere all’utilizzo dello scheduler di vlc, una funzionalità che permette di far eseguire a vlc una determinata operazione al momento desiderato e di ripeterla periodicamente. Lo scheduler è una delle opzioni offerte da vlm, il “linguaggio” di scripting di vlc…Vlm consente di passare a vlc, tramite l’interfaccia telnet o un file di configurazione, dei comandi che permettono di sfruttare tutte le funzionalità offerte da vlc soprattutto in qualità di server, infatti vlm è stato pensato principalmente per sessioni di video on demand consentendo di gestire lo streaming di diversi file con un unico processo vlc aperto, ma di fatto può essere utilizzato per compiere qualsiasi operazione.

Utilizzando i seguenti comandi ad esempio è possibile salvare lo stream audio di radio dj su un file, definendo prima l’oggetto “deejay” e specificandone in seguito i parametri di ingresso (l’indirizzo dello stream) e di uscita (in questo caso un file):

new deejay broadcast enabled

setup deejay input mms://live.mediaserver.kataweb.it/radiodeejay

setup deejay output #std{access=file,mux=asf,dst=”radio.asf”}

control deejay play

Ho dovuto definire “deejay” come oggetto broadcast “fittizio” in quanto, come accennato prima, vlm è nato per la configurazione di vlc come server per la trasmissione broadcast oppure “on demand”. In seguito però con il parametro output ho specificato di indirizzare l’uscita su un file, senza ritrasmettere nulla. Questi comandi possono essere passati tramite telnet riga per riga, oppure inseriti in un file “deejay.vlm” e poi dati in pasto a vlc quando lo si lancia da riga di comando:

vlc –vlm-conf deejay.vlm

In questo modo vlc inizia da subito a salvare lo stream su file. Se invece si vuole programmare la registrazione con lo scheduler si devono inserire altri parametri per specificare la data per lo start e quella per lo stop:

new deejay broadcast enabled

setup deejay input mms://live.mediaserver.kataweb.it/radiodeejay

setup deejay output #std{access=file,mux=asf,dst=”radio.asf”}

new start schedule enabled

setup start date 2008/01/07-22:30:00

setup start append control deejay play

new stop schedule enabled

setup stop date 2008/01/08-00:01:00

setup stop append control deejay stop

In questo caso ho definito due oggetti “start” e “stop” , li ho assegnati alla categoria schedule, ne ho definito i parametri date e control e infine li ho associati all’oggetto “deejay”. Con questo script vlc inizia a registrare lo stream alle 22e30 del 7 gennaio e finisce alle 00:01 dell’8 gennaio.

Il passo successivo è quello di rendere periodica questa operazione, configurando lo scheduler per eseguire la registrazione allo stesso orario di ogni lunedì. Questo può essere fatto utilizzando il parametro period, indicando di ripetere i comandi start e stop ogni 7 giorni. Ad esempio per il comando di start si ottiene:

new start schedule enabled

setup start date 2008/01/07-22:30:00

setup start period 0/0/7-00:00:00 (cioè ogni 7 giorni)

setup start append control deejay play

Lo stesso parametro andrebbe aggiunto all’oggetto “stop”.

Questo metodo presenta però alcuni svantaggi, infatti se durante la settimana la macchina venisse riavviata oppure venisse terminato il processo di vlc, al suo riavvio occorrerebbe riconfigurare lo script a partire dal giorno successivo, infatti lo scheduler permette di registrare ogni 7 giorni a partire dal giorno specificato, quindi riavviando vlc con il vecchio script lo scheduler attenderebbe una data che si è già verificata e non verrebbe registrato più niente. Inoltre con questo metodo occorre intervenire “manualmente” per spostare o rinominare ogni registrazione ed evitare che venga sovrascritta con la registrazione successiva.

Ho pensato quindi di risolvere la faccenda una volta per tutte combinando lo scheduler di vlm con cron, così:

  • creare uno script bash che generi a sua volta uno script vlm (come visto sopra) che abbia lo scheduler impostato per registrare la trasmissione nel giorno corrente, usando il comando date di linux per ricavare la data da utilizzare sia nello scheduler che nel nome del file (in modo da generare file diversi con la sintassi già vista la volta scorsa).
  • impostare cron per richiamare lo script ogni lunedì prima dell’inizio della registrazione.

Questo è lo script bash “deejay.sh”:

#! /bin/bash
start_date=$(date +%Y/%m/%d)-19:00:00
stop_date=$(date –date=’tomorrow’ +%Y/%m/%d)-19:04:00
giorno=$(date +%d)
mese=$(date +%b)
anno=$(date +%y)
titolo=cordialmente$giorno$mese$anno.asf

echo “new deejay broadcast enabled
setup deejay input mms://live.mediaserver.kataweb.it/radiodeejay
setup deejay output #std{access=file,mux=asf,dst=\”$titolo\”}
new start schedule enabled
setup start date $start_date
setup start append control deejay play
new stop schedule enabled
setup stop date $stop_date
setup stop append control deejay stop ” > /home/muse/deejay.vlm

sleep 2

/usr/bin/vlc -I telnet –vlm-conf /home/muse/deejay.vlm -d

Da notare il comando date –date=’tomorrow’ +%Y/%m/%d che è un utile opzione di date per generare una data futura o passata. Ringrazio l’autore dell’articolo Getting Yesterdays or Tomorrows day with shell date command per avermi illuminato.

Ho inserito alla fine il comando per avviare vlc, usando come file di configurazione “deejay.vlm” generato dallo script stesso. Lo sleep serve a introdurre un pò di ritardo tra la scrittura del file e il suo utilizzo da parte di vlc. Ho dovuto inoltre aggiungere il parametro “-I telnet” perchè altrimenti vlc proverebbe ad aprire l’interfaccia grafica generando un errore nel caso in cui il comando venisse eseguito da crontab.

A questo punto non resta che impostare cron per richiamare deejay.sh ogni lunedì prima dell’orario di registrazione e per fargli terminare il processo vlc dopo che lo scheduler di vlm abbia provveduto a stoppare la registrazione stessa :

# m h dom mon dow command

20 22 * * 1 /home/muse/deejay.sh

03 00 * * 2 killall vlc

E questo è quanto, buon ascolto.

Questo articolo è dedicato a Braindamage.. lui sa perchè, lui sa chi è, lui sa cos’è..

Comments are closed.