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
- Mottagare (DVB-T USB pinne eller kort)
- Testa om hårdvaran fungerar (sök på nätet innan köp)
- Kanallista
- Spara DVB strömmen till fil
- 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)
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)
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..."
- Välj ikon
- Skriv in ett namn för programstartaren i "Namn", t.ex VLC-TV
- I fältet Kommando, skriv: vlc /sökväg_till/.mplayer/channels.conf
- 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