Pagina 1 di 2

Errore con streamdev: pipe interrotta

Inviato: 05 ott 2010, 21:23
da stiaga
Salve a tutti,
ho un mini itx con ubuntu 10.04 e vdr: tutto funzionante.

Vorrei fare streaming verso i computer che ho in camera e quindi ho installato il plugin streamdev: facendo streaming con TS tutto funziona.

Dato che uso la wireless vorrei comprimere il flusso video video con mencoder ma ho dei problemi. In pratica quando clicco sul canale non vedo niente e sul syslog vedo comparire:

........
Oct 5 21:13:48 vdr vdr: [1769] receiver on device 1 thread started (pid=1241, tid=1769)
Oct 5 21:13:48 vdr vdr: [1770] TS buffer on device 1 thread started (pid=1241, tid=1770)
Oct 5 21:13:48 vdr vdr: [1241] switching to channel 27
Oct 5 21:13:49 vdr vdr: [1765] ERROR: write failed: Pipe interrotta
Oct 5 21:13:49 vdr vdr: [1765] ERROR: write failed: Pipe interrotta
Oct 5 21:13:49 vdr vdr: [1770] TS buffer on device 1 thread ended (pid=1241, tid=1770)
.......


Il file externremux.sh è il seguente:
#!/bin/sh
rm -f /tmp/out.avi
/usr/bin/mkfifo /tmp/out.avi
cat /tmp/out.avi & /usr/bin/mencoder -ovc lavc -oac lavc -lavcopts vbitrate=400:abitrate=64 -vf scale=420:-2 -o /tmp/out.avi -- - &>/tmp/out.log

Chi mi da una mano?
GRAZIE!!!

Re: Errore con streamdev: pipe interrotta

Inviato: 06 ott 2010, 00:25
da davidea
ciao e benvenuto!

domanda ovvia, mencoder e' installato??

/tmp/out.log cosa ti dice?

Re: Errore con streamdev: pipe interrotta

Inviato: 06 ott 2010, 13:12
da stiaga
Mencoder è installato e il file out.log è vuoto.
Entrambi i file out.log e out.avi sono a 0 byte.

Ho provato a cambiare lo script externremux.sh mettendo solamente

#!/bin/sh
rm -f /tmp/out.avi
/usr/bin/mkfifo /tmp/out.avi

ma sul syslog vedo il solito errore.

Da qui deduco che non è un problema di mencoder, dico bene??

Re: Errore con streamdev: pipe interrotta

Inviato: 06 ott 2010, 13:34
da ragno
Hai dato un'occhiata qui viewtopic.php?t=1271

ciao

Re: Errore con streamdev: pipe interrotta

Inviato: 06 ott 2010, 15:52
da stiaga
GIà visto ma non credo sia il mio caso.

Re: Errore con streamdev: pipe interrotta

Inviato: 06 ott 2010, 17:28
da alez
Una banalità, oltre a mencoder suggerito da ragno: externremux.sh è nel posto giusto? inoltre è eseguibile?

Re: Errore con streamdev: pipe interrotta

Inviato: 06 ott 2010, 21:04
da davidea
nel mio externalremux, che e' un po' piu' elaborato ho :

$CMDx264=250$SNDmx264 $RES 320 $OUT -- - &>$LOG ;;

dove

$CMDx264 e' mencoder -ovc x264 -x264encopts bitrate
$SNDmx264 e' :subq=4:bframes=2:b_pyramid:weight_b -oac mp3lame -lameopts preset=15:mode=3
$RES e' -vf scale -zoom -xy
TMP e' /tmp/externremux-${RANDOM:-$$}
$OUT e' -o $TMP/out.avi
$LOG e' $TMP/out.log

quindi

mencoder -ovc x264 -x264encopts bitrate=250:subq=4:bframes=2:b_pyramid:weight_b -oac mp3lame -lameopts preset=15:mode=3 -vf scale -zoom -xy -o /tmp/externremux-${RANDOM:-$$}/out.avi -- - &> /tmp/externremux-${RANDOM:-$$}/out.log


e out.log e' pieno

Re: Errore con streamdev: pipe interrotta

Inviato: 06 ott 2010, 22:47
da stiaga
Lo script è eseguibile e viene caricato dal plugin, infatti facendo un ps ax|grep vdr vedo

/usr/bin/vdr -v /var/lib/video.00 -c /var/lib/vdr -L /usr/lib/vdr/plugins -r /usr/lib/vdr/vdr-recordingaction -s /usr/lib/vdr/vdr-shutdown.wrapper -E /var/cache/vdr/epg.data -u vdr -g /tmp --port 2001 --lirc -P sc -P streamdev-server -r /var/lib/vdr/plugins/streamdev/externremux.sh -P text2skin -P skinenigmang --logodir=/usr/share/vdr-enigmang-icons --epgimages=/var/cache/vdr/epgimages -P yaepghd -P xineliboutput --local=none --primary --remote=127.0.0.1:37890 --vfat -w 60

e lo script externremux è in /var/lib/vdr/plugins/streamdev/

Che può essere?

Re: Errore con streamdev: pipe interrotta

Inviato: 07 ott 2010, 08:24
da ragno
stiaga ha scritto:
Che può essere?
Che mkfifo non crea la pipe fifo oppure mencoder va in crash allo startup per qualche ragione...
Dovresti lanciare vdr manualmente da console e poi vedere cosa accade quando parte mencoder...
Oppure prendi una registrazione e dalla in pasto a mencoder...e vedi quello che succede.

ciao

Re: Errore con streamdev: pipe interrotta

Inviato: 07 ott 2010, 16:12
da alez
Hai provato il mio externremux come ti ha consigliato ragno?

Re: Errore con streamdev: pipe interrotta

Inviato: 07 ott 2010, 16:18
da stiaga
Sì ho provato ma niente.
Non credo che sia un problema di mencoder, infatti (come già detto prima) anche se le levo la stringa di mencoder il problema si presenta lo stesso.

Re: Errore con streamdev: pipe interrotta

Inviato: 08 ott 2010, 08:13
da ragno
stiaga ha scritto:Sì ho provato ma niente.
Non credo che sia un problema di mencoder, infatti (come già detto prima) anche se le levo la stringa di mencoder il problema si presenta lo stesso.
Prova a verificare, specificando col parametro -r il path dello script per l'externalremux...
In ogni caso (in extern.c):

Codice: Seleziona tutto

cTSExt::cTSExt(cRingBufferLinear *ResultBuffer, const cServerConnection *Connection, const cChannel *Channel, const int *Apids, const int *Dpids):
m_ResultBuffer(ResultBuffer),
m_Active(false),
m_Process(-1),
m_Inpipe(0),
m_Outpipe(0)
{
int inpipe[2];
int outpipe[2];

if (pipe(inpipe) == -1) {
LOG_ERROR_STR("pipe failed");
return;
}

if (pipe(outpipe) == -1) {
LOG_ERROR_STR("pipe failed");
close(inpipe[0]);
close(inpipe[1]);
return;
}

if ((m_Process = fork()) == -1) {
LOG_ERROR_STR("fork failed");
close(inpipe[0]);
close(inpipe[1]);
close(outpipe[0]);
close(outpipe[1]);
return;
}
L'errore viene generato dalla seconda if

1) mkfifo non crea correttamente la pipe
2) vdr non ha permessi per accedere alla pipe in scrittura

ciao

p.s. ci prepariamo ad arrampicarci sugli specchi... :)

Re: Errore con streamdev: pipe interrotta

Inviato: 08 ott 2010, 08:40
da stiaga
Il paramentro r glielo sto già passando.
In extern.c sinceramente non ci ho guardato.
Delle 2 ipotesi credo sia più la seconda, ossia che l'utente vdr non riesce a scrivere sulla pipe.
Ma il plugin streamdev ultilizza lo stesso utente di vdr?
Ora che mi ricordo avevo già provato a fare in modo che creasse la pipe in modalità 0777 con il l'opzione -m, ma ho ottenuto lo stesso risultato.

Inoltre come posso fare a testare se mkfifo funziona correttamente?
Digitando il comando da riga di comando non mi restituisce nessun errore.

Io penso che stiamo arrivando alla soluzione invece!

Re: Errore con streamdev: pipe interrotta

Inviato: 08 ott 2010, 09:21
da ragno
stiaga ha scritto:Il paramentro r glielo sto già passando.
In extern.c sinceramente non ci ho guardato.
Delle 2 ipotesi credo sia più la seconda, ossia che l'utente vdr non riesce a scrivere sulla pipe.
Ma il plugin streamdev ultilizza lo stesso utente di vdr?
Ora che mi ricordo avevo già provato a fare in modo che creasse la pipe in modalità 0777 con il l'opzione -m, ma ho ottenuto lo stesso risultato.

Inoltre come posso fare a testare se mkfifo funziona correttamente?
Digitando il comando da riga di comando non mi restituisce nessun errore.

Io penso che stiamo arrivando alla soluzione invece!
Poiche' non hai specificato la distro che stai utilizzando, suppongo ubunto, hai 2 possibilita':

1) testare tutto lanciando da console lo script che start vdr:

Codice: Seleziona tutto

sudo runvdr.sh
2) "sudare" mkfifo in maniera che crei la pipe con i permessi per l'utente standard vdr

Codice: Seleziona tutto

echo tuapassword|sudo -S rm -f /tmp/out.avi
echo tuapassword|sudo -S /usr/bin/mkfifo --mode=0666 /tmp/out.avi 
ciao

Re: Errore con streamdev: pipe interrotta

Inviato: 11 ott 2010, 12:42
da stiaga
Ho provato a far girare vdr con utente root ma niente, nessun risultato.
Può darsi che sia qualche plugin che rompe le scatole?