Pagina 1 di 3

[SOLVED] Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: ven giu 21, 2019 12:33
da Burroughs
Ben ritrovati a tutti dopo tanto tempo.
Torno a scrivervi per sottoporvi un problema che, sinceramente, non riesco ad inquadrare.
Per circoscrivere la cosa, ecco lo stato dei fatti: mi sono trasferito da poco all'estero e sentendo nostalgia dei programmi tv di casa ho deciso di acquistare un'app sull'Apple Store che consente di vedere lo streaming in chiaro dei canali free italiani, ovviamente sotto una buona VPN.
Specifico che si tratta di canali in chiaro, quindi niente di illegale.
L'app in questione carica una lista di url, presente su pastebin, e ne consente la visualizzazione.
Avendo a casa una buona connessione Internet (fibra a 100 Mbps) e la mia fida Raspberry Pi 3 ho deciso di "costruirmi" un piccolo PVR per registrarmi le cose che più mi piacciono, specie quando sono fuori casa.
In verità lo script in questione non fa altro, sulla Raspberry, che invocare questo comando:

Codice: Seleziona tutto

/usr/bin/ffmpeg -async 26 -i "${URL}" -c:v libx264 -crf 0 -c:a copy /path_to_usb_drive/flux-$(date +"%d-%m-%y-%H-%M").ts

Ovviamente, prima di qualsiasi altra cosa, avvio la VPN.
Ora, la registrazione viene effettuata regolarmente (la directory di destinazione si trova su un banalissimo pennino USB), va tutto bene per 14-18 minuti, poi niente.
Mi spiego ancora meglio: la registrazione va avanti anche per un'ora, alla fine ottengo un file corposo, quindi il tutto sembrerebbe svolgersi senza problemi, ma alla fine il file risultante copre sempre e soltanto 14-18 minuti di visione.
Lanciando lo stesso comando sul mio Macbook tutto fila liscio.
Ho provato a cambiare la directory di destinazione della registrazione, stessa cosa.
Vi do in visione il mio /etc/fstab, magari il problema è lì:

Codice: Seleziona tutto

pi@glasgy:~ $ cat /etc/fstab
proc            /proc           proc    defaults          0       0
/dev/mmcblk0p6  /boot           vfat    defaults          0       2
/dev/mmcblk0p7  /               ext4    defaults,noatime  0       1
UUID=8803a1d9    /mnt/usb      ext4   defaults,auto,umask=000,users,rw,nofail 0 0
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

Sinceramente trovo scomodo usare il laptop per un'operazione del genere e non vorrei comprare un Macbook Mini solo per questo, per cui sarebbe grande se riuscissi a fare il tutto sulla mia Raspberry.
Che ne dite?

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: sab giu 22, 2019 10:46
da rik70
Burroughs ha scritto:alla fine il file risultante copre sempre e soltanto 14-18 minuti di visione.

Cosa succede però quando lo riproduci: s'interrompe al minuto 14-18, oppure la riproduzione continua oltre e vedi... ...cosa?

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: sab giu 22, 2019 10:54
da Burroughs
rik70 ha scritto:Cosa succede però quando lo riproduci: s'interrompe al minuto 14-18, oppure la riproduzione continua oltre e vedi... ...cosa?

Sì, si interrompe dopo 15-18 minuti, non c'è nessuno schermo nero, eppure il file risultante è abbastanza cospicuo.

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: sab giu 22, 2019 11:25
da rik70
Uhm....
...non so, provo a buttarla lì:
- non è che l'hardware non "regge" il parametro '-crf 0' durante la codifica?
Immagino che lo usi per avere una qualità il più possibile senza perdita, ma mi sembra eccessivo. Prova ad aumentarlo - valori tra 15 e 18 dovrebbero essere sufficienti allo scopo.
- problemi di alimentazione? Ma lo escluderei, visto che dovresti vedere degli errori nel ring buffer del kernel.
- prova a incollare

Codice: Seleziona tutto

cat /proc/cmdline

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: sab giu 22, 2019 11:38
da rik70
rik70 ha scritto:cat /proc/cmdline

P.s.
In particolare, prova a controllare se vedi questa voce

Codice: Seleziona tutto

smsc95xx.turbo_mode=N

Io quel parametro di boot lo utilizzo sia sul PI2 che sulla versione 1B, perché avevo dei problemi di buffering su alcuni stream remoti.
Avevo letto che la modalità turbo_mode sul controller USB va a inficiare le prestazioni del contoller ethernet e credo sia attiva di default.
Disabilitandola, non perdi granché in prestazioni sulla parte USB dell'hw.

Non so dirti però se il discorso valga anche sul PI3, ma credo che l'hardware sia sostanzialmente identico alla versione 2.

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: sab giu 22, 2019 11:39
da brg
Prova a registrare in segmenti, invece che tutto in un solo stream: dovrebbe diminuire il consumo di risorse di sistema. Usando l'opzione "segment" puoi suddividere lo stream in tanti file di durata prefissata. Ho il dubbio che il problema in questo caso riguardi l'hardware e magari il consiglio di aumentare il crf, che leggo che ha un valore predefinito di 23, non è malvagia.

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: sab giu 22, 2019 12:52
da Burroughs
Allora, ho cambiato il valore del crf ma è andata anche peggio, il file registrato visualizza solo 11 minuti anche se, da shell, il flusso va avanti e non si interrompe, cosa questa che, comunque, mi è sempre capitata.

Incollo la voce che mi avete richiesto, premettendo che smsc95xx.turbo_mode=N non l'ho trovata:

Codice: Seleziona tutto

pi@glasgy:~ $ cat /proc/cmdline
coherent_pool=1M 8250.nr_uarts=0 bcm2708_fb.fbwidth=640 bcm2708_fb.fbheight=480 bcm2708_fb.fbswap=1 vc_mem.mem_base=0x3ec00000 vc_mem.mem_size=0x40000000  dwc_otg.lpm_enable=0 console=ttyS0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymouth.ignore-serial-consoles

Non penso si tratti di un problema di alimentazione (il Raspberry lo alimento dalla corrente), anch'io propendo per una problematica hardware visto che, come vi scrivevo prima, sul Macbook Pro tutto fila liscio come l'olio.

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: sab giu 22, 2019 13:31
da rik70
Prova a fare allora quanto suggerivo prima.

Verifica se l'hardware utilizza il driver smsc95xx:

Codice: Seleziona tutto

dmesg | grep smsc95xx

Nel caso, dovresti vedere qualcosa che riguarda sia l'usbcore che l'ethernet.

Se il test è positivo, allora aggiungi ai parametri di avvio l'argomento 'smsc95xx.turbo_mode=N' - senza gli apici.

Ravvia e riprova a catturare il flusso audio/video.

Altra ipotesi:
che sia un problema del formato '.ts'?
Provato a cambiare muxer - tipo .mp4, se il codec audio è compatibile - magari aggiungendo a ffmpeg l'argomento `-movflags faststart` ?

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: sab giu 22, 2019 15:08
da Burroughs
rik70 ha scritto:Prova a fare allora quanto suggerivo prima.
[CUT]

Ho provato a cambiare il muxer, passandogli le nuove opzioni, ma è anche peggio: non si riesce a vedere nulla ed il file "copre" solo novanta secondi.
Questo è l'output relativo al driver.

Codice: Seleziona tutto

pi@glasgy:~ $ dmesg | grep smsc95xx
[    0.307403] usbcore: registered new interface driver smsc95xx

Più tardi provo a riavviare... ;-)

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: sab giu 22, 2019 17:07
da Burroughs
Allora, prima di tutto, posto il listato delle opzioni di boot del Raspberry per essere certo di non aver commesso errori:

Codice: Seleziona tutto

pi@glasgy:~ $ cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymouth.ignore-serial-consoles smsc95xx.turbo_mode=N

Ho provato a ricatturare lo stream, stavolta sia andati vicini ai 14 minuti, nulla di più.

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: sab giu 22, 2019 19:07
da brg
Hai provato a segmentare il file di registrazione con qualcosa del tipo "-f segment -segment_time 600"?

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: sab giu 22, 2019 19:16
da Burroughs
brg ha scritto:Hai provato a segmentare il file di registrazione con qualcosa del tipo "-f segment -segment_time 600"?

Mi dà questo errore:

Codice: Seleziona tutto

[mpegts @ 0x3199bf0] Invalid segment filename template '/media/pi/RASPY/PVR/posto-22-06-19-18-13.ts'
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:0 --

Il comando che lancio adesso è:

Codice: Seleziona tutto

/usr/bin/ffmpeg -async 26 -i "${URL}" -c:v libx264 -crf 16 -f segment -segment_time 600 -c:a copy /media/pi/RASPY/PVR/posto-$(date +"%d-%m-%y-%H-%M").ts

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: sab giu 22, 2019 21:51
da Burroughs
[UPDATE] Nel pomeriggio mi sono compilato mpv, sfruttando le indicazioni (molto al limite, invero) contenute qui ed è successo un mezzo miracolo.

Lanciando questo comando, infatti, sono riuscito a registrare per 28 minuti (poi ho interrotto io manualmente):

Codice: Seleziona tutto

mpv "${URL}" --record-file="/media/pi/RASPY/PVR/posto-$(date +"%d-%m-%y-%H-%M").ts

Il problema dovrebbe essere risolto ma, per tutta sicurezza, proverò domani con una registrazione lunga... :)

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: dom giu 23, 2019 8:47
da rik70
Questo è l'output relativo al driver.

Codice: Seleziona tutto

pi@glasgy:~ $ dmesg | grep smsc95xx
[    0.307403] usbcore: registered new interface driver smsc95xx[/quote]
Uhm... no, nel tuo caso il 'turbo_mode' non ha effetto. Evidentemente nel PI3 la parte ethernet è controllata da un driver diverso. Quindi il mio discorso non è valido.

Codice: Seleziona tutto

mpv "${URL}" --record-file="/media/pi/RASPY/PVR/posto-$(date +"%d-%m-%y-%H-%M").ts
In questo modo però fai il dump del flusso senza alcuna codifica.

Per replicare quello che stavi tentando con ffmpeg dovresti provare con:

Codice: Seleziona tutto

mpv "${URL}" -o /media/pi/RASPY/PVR/posto-$(date +%d-%m-%y-%H-%M).ts --ovc libx264 --oac aac

Re: Raspberry Pi 3 e problemi di scrittura flussi streaming

Inviato: dom giu 23, 2019 9:03
da Burroughs
Grazie, rik, ho avviato la registrazione, conto di tenerla su un paio d'ore, così da testarla a fondo.
Non ho avuto modo di cercare ancora, ma a te risulta che a mpv sia passabile un'opzione tipo async di ffmpeg per risolvere eventuali problemi di audio fuori sincrono?