TV och inspelning i Datorn

Att spela in TV i datorn har många fördelar. I dag så sker all marksänd TV digitalt vilket gör det ganska enkelt för datorn att hantera. Signalen behöver inte digitaliseras, vilket behövs om signalen plockas från ett analogt uttag. Det enda som behövs är en enkel USB TV pinne och en antenn för att plocka in signalen i datorn. Kvaliteten på inspelningen är den samma oavsett hur dyrt PCI-kort eller USB-pinne man köper, förutsatt att man har god mottagning. Oftast när man köper en DVB-T mottagare för datorn så följer programvara med för att titta på och spela in TV. Tyvärr är dessa program ofta dåligt skrivna och jag har många gånger varit med om oförklarliga codec konflikter i Windows system. Jag har då hittat alternativ i Linux/UNIX världen som varit betydligt stabilare och oftast gett bättre resultat.

Principen är

  1. Mottagare (DVB-T USB pinne eller kort)
  2. Testa om hårdvaran fungerar (sök på nätet innan köp)
  3. Kanallista
  4. Spara DVB strömmen till fil
  5. Ev. omkoda inkommande MPEG2 till andra format direkt eller senare från sparad ström

Detta dokument är skrivet mest för att visa olika metoder att hantera och ta emot en DVB-T ström i ett Linux system.

Installera (eller se till att dom finns) följande program i ditt Linux system

  • tzap
  • mplayer
  • mencoder
  • ffmpeg
  • vlc
  • nc (netcat)

Verktyg

sudo apt-get install dvb-tools dvb-apps dvbstream w-scan

För uppspelning

sudo apt-get install ffmpeg mplayer vlc

Mottagare

Stoppa in USB mottagaren eller kortet i datorn med antennen inkopplad. Se till att kortet registrerar genom att i en terminal skriva:

sudo tail -f /var/log/messages

Så här ser det ut för t.ex. Hauppauge Hauppauge Nova-T Stick:

usb 1-1.3.5: new high-speed USB device number 10 using dwc_otg
usb 1-1.3.5: New USB device found, idVendor=2040, idProduct=7050
usb 1-1.3.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-1.3.5: Product: Nova-T Stick
usb 1-1.3.5: Manufacturer: Hauppauge
usb 1-1.3.5: SerialNumber: 4027216677
dvb-usb: found a 'Hauppauge Nova-T Stick' in cold state, will try to load a firmware
dvb-usb: downloading firmware from file 'dvb-usb-dib0700-1.20.fw'
dib0700: firmware started successfully.
dvb-usb: found a 'Hauppauge Nova-T Stick' in warm state.
dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
DVB: registering new adapter (Hauppauge Nova-T Stick)
usb 1-1.3.5: DVB: registering adapter 0 frontend 0 (DiBcom 7000MA/MB/PA/PB/MC)...
MT2060: successfully identified (IF1 = 1250)
Registered IR keymap rc-dib0700-rc5
input: IR-receiver inside an USB DVB receiver as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3.5/rc/rc0/input3
rc0: IR-receiver inside an USB DVB receiver as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3.5/rc/rc0
dvb-usb: schedule remote query interval to 50 msecs.
dvb-usb: Hauppauge Nova-T Stick successfully initialized and connected.

Resultatet bör innehålla något som liknar:

firmware started successfully

och

dvb-usb: Hauppauge Nova-T Stick successfully initialized and connected.

Om det inte fungerar

Se till att det finns firmware för enheten (mottagaren) i mappen "/lib/firmware/".

Två exempel på USB TV pinnar som fungerar utmärkt i Linux.

Hauppauge Nova-T Stick (lite gammal men funkar även i Mac)

WinTV-NOVA-T-Stick_small.png

http://www.prisjakt.nu/produkt.php?o=90988

wget linuxtv.org/downloads/firmware/dvb-usb-dib0700-1.20.fw

Från denna site: dvb-usb-dib0700-1.20.fw.tar.gz

Hauppauge WinTV MiniStick (billigare och i mitt tycke ett bättre alternativ)

WinTV-MiniStick_small.png

http://www.prisjakt.nu/produkt.php?e=359050

wget http://www.steventoth.net/linux/sms1xxx/sms1xxx-hcw-55xxx-dvbt-02.fw

Från denna site: sms1xxx-hcw-55xxx-dvbt-02.fw.tar.gz

Sök på Google efter firmware för just din enhet.

Bästa stället att hitta firmware och annat är:

www.linuxtv.org

Skapa en kanallista

Redigera "/usr/share/dvb/dvb-t/se-Stockholm_Nacka" (eller den stad du bor i).

Exempel på rensad fil för Stockholm (fri från betalkanaler):

# Sweden - Stockholm/Nacka
# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy
### Rensad lista (övriga är betalkanaler eller inaktiva)
T 490000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE   # Teracom_Mux_1
T 642000000 8MHz 2/3 NONE QAM64 8k 1/8 NONE   # Teracom_Mux_2

Scanna med:

scan -n -o zap -p /usr/share/dvb/dvb-t/se-Stockholm_Nacka > channels.conf

Kanallista (~/.mplayer/channels.conf) för Stockholm Nacka (samma som Marieberg).

SVT1:490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:1019:1018:5770
SVT2:490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:1029:1028:5510
Kunskapskanalen:490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:1249:1248:1240
Barnkanalen:490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:879:878:870
SVT24:490000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:879:878:870
TV4:642000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_NONE:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:1049:1048:6110
TV6:642000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE:1079:1078:1070
# SVT HD har slutat sända DVB-T 1:a mars 2010 och gått över till DVB-T2
#SVT-HD:730000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:619:617:610

Denna kanallista kan även användas för VLC.

Kopiera kanallista från ~/.mplayer/channels.conf till ~/.tzap/channels.conf

Testa om det fungerar

För att bara kolla på TV i Linux tycker jag att detta kommando fungerar bäst:

mplayer -cache 4096 -vf pp=l5 dvb://"SVT1"

Det går också bra att använda VLC.

I Ubuntu, högerklicka på en tom plats på skrivbordet, välj "Skapa programstartare..."

  1. Välj ikon
  2. Skriv in ett namn för programstartaren i "Namn", t.ex VLC-TV
  3. I fältet Kommando, skriv: vlc /sökväg_till/.mplayer/channels.conf
  4. Kommentar: Se på TV med VLC

I VLC:s spellista kommer dom kanaler som finns listade i mplayers channels.conf att visas.

Fler exempel

Sätt igång en ström som går till adaptern "/dev/dvb/adapter0/dvr0":

tzap -c ~/.tzap/channels.conf -r "SVT1"

Denna ström går sedan att titta på i mplayer med:

mplayer /dev/dvb/adapter0/dvr0

eller

mplayer - < /dev/dvb/adapter0/dvr0

eller

cat /dev/dvb/adapter0/dvr0 | mplayer -

Spara (spela in) TV-ström till fil

Spela in direkt med tzap (-t 3600 (sekunder) = 1 h inspelning).

tzap -t 3600 "SVT1" -o SVT1.ts

(använd -o - för stdout)

Alternativt, öppna en ström med:

tzap -S -r "SVT1"

I en annan terminal, skriv förlande för att spara till filen "test.ps":

cat /dev/dvb/adapter0/dvr0 > test.ts

Om systemet klagar över "cat: /dev/dvb/adapter0/dvr0: Value too large for defined data type", prova:

dd if=/dev/dvb/adapter0/dvr0 of=test.ts conv=noerror

Mer om inspelning

Sätt igång en ström med:

tzap -r "SVT2"

Spara strömmen med dvbstream. Flaggan -ps gör om strömmen till PS (Program Stream) som gör filen mer lättläst i fler spelare istället för PES (Packetized Elementary Stream), vilken är default:

dvbstream 405 404 -o -ps > test.mpeg

(405 är video pid och 404 är audio pid).

Spela in direkt till fil med dvbstream utan behov av tzap:

dvbstream -c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 490000000 -ps -n 3600 -o 1019 1018 > SVT1.mpg

Exemplet gäller SVT1 Stockholm Nacka/Marieberg, (-n 3600 = 1 timme).

Gör om TV-ström till andra format

Bra och någorlunda snabba ffmpeg parametrar för omkodning till H264 (MPEG4):

ffmpeg -i test.mpg -aspect 16:9 -c:v libx264 -preset medium -crf 22 -c:a libfaac -b:a 160k -async 1 -threads auto test.mp4

Koda med crop och de-interlace (vettigt för TV):

ffmpeg -i test.mpg -vf yadif=2:-1:1,crop=716:564:2:6 -aspect 16:9 -c:v libx264 -preset medium -crf 22 -c:a libfaac -b:a 160k -async 1 -threads auto test.mp4

Fler omkodningsexempel med mencoder:

mencoder -of mpeg -ni -mpegopts format=dvd:vbitrate=9000 -o test.m4v -oac copy -ovc copy test.mpeg

Låt ffmpeg konvertera dvb-t ström till mp4 i realtid

Öppna en kanalström, tzap funkar bra för detta:

tzap -S -r SVT1

Från en annan terminal, skriv (OBS! kräver mycket CPU kraft):

ffmpeg -i /dev/dvb/adapter0/dvr0 -b 1600 -ab 192 utfil2.mp4

Tryck [q] för att sluta spela in och kolla om det finns en fil att titta på.

Detta exempel skapar en mp4 fil som är kompatibel med iOS (iPads och iPhones):

ffmpeg -i /dev/dvb/adapter0/dvr0 -aspect 16:9 -vf scale=640:480 -acodec libfaac -ab 160k -ar 48000 -vcodec libx264 -crf 22 -preset medium -threads 0 -async 1 inspelning.mp4

Notera att att fel kan uppstå så som "/dev/dvb/adapter0/dvr0: Value too large for defined data type".

Om problem uppstår kan man prova att skiva en pipa från dd till ffmpeg:

dd if=/dev/dvb/adapter0/dvr0 conv=noerror | ffmpeg -i - -aspect 16:9 -acodec libfaac -ab 160k -ar 48000 -vcodec libx264 -crf 23 -threads auto -async 1 inspeling.mp4

Testa även denna som ger full SD upplösning (576x720px):

ffmpeg -i /dev/dvb/adapter0/dvr0 -aspect 16:9 -acodec libfaac -ab 160k -ar 48000 -vcodec libx264 -crf 23 -threads auto -async 1 atv1_test06.mp4

Ffmpeg kan givetvis användas för andra format på liknande sätt.

Fler konverteringsexempel

Utgå från en TV Dump-fil.

tcprobe -i test.ts

Detta gör om DVB-t filen till en mer lättläst mpeg2 fil:

mencoder -of mpeg -ni -mpegopts format=dvd:vbitrate=9000 -o test_dvd.mpg -oac copy -ovc copy test.ts

TV-strömning genom nätverk

En TV-ström i SD format kräver en Bit Rate på 15.00 Mbit/s.

Server (med TV DVB-T mottagare)

Se till att adaptern är igång med en vald kanal, t.ex:

tzap -S -r "SVT1"

Från en annan terminal från server, läs och strömma ut med nc (netcat):

cat /dev/dvb/adapter0/dvr0 | nc -l -p 1234

Detta kan även fungera med en liten Raspberry Pi, men måste modifiera kommandot till detta för att den ska orka med att läsa strömmen:

dd if=/dev/dvb/adapter0/dvr0 conv=noerror | nc -l -p 1234

Detta drar mindre än 10% CPU på en otrimmad Raspberry Pi.

Ett alternativ till tzap är att använda dvbstream med detta kommando (Svt1 Stockholm):

dvbstream -c 0 -qam 64 -cr 2_3 -gi 8 -bw 8 -tm 8 -f 490000000 -ps -n 3600 -o 1019 1018 | nc -l -p 1234

Klient

Uppspelning på en annan kraftigare dator i nätverket (som kanske även kan omkoda den):

nc 192.168.1.99 1234 | mplayer -

Om det hackar och om du vill ha de-interlace (avflätning):

nc 192.168.1.99 1234 | mplayer - -vf pp=l5 -cache 1024

Andra roliga program

Kolla även VLC och EyeTV Plug-in.

http://www.videolan.org/vlc/eyetv/

|•|

 


"DVBt TV i Datorn", Hans E Andersson: 2008-11-12 02:37:25, ändrad: 2014-01-11 20:10:20

 

Copyright © 2005 - 2019 HEAP. Alla rätter förbehållna. Integritetspolicy