Differences between revisions 1 and 16 (spanning 15 versions)
Revision 1 as of 2011-01-07 17:47:50
Size: 14722
Editor: samiojanen
Comment: Tässähän tätä nyt on sitten
Revision 16 as of 2014-07-11 23:57:49
Size: 20531
Editor: nmi
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Ubuntu 10.04 LTS:ään VDR:n asentaminen .ts-tiedostoille= = VDR:n asentaminen Ubuntuun (12.04 - 14.04) =
Ohje on kokoelma nm:n aloittamasta Ubuntu-fi-foorumilla julkaistusta säikeestä: http://forum.ubuntu-fi.org/index.php?topic=29787.0, jonne keskustelu tästä wikistä voidaan keskittää. Kiitokset keskusteluun osallistujille ja nm:lle, että antoi jatko julkaista ohjeensa myös täällä wikissä.
Line 4: Line 5:
[http://www.tvdr.de VDR] (Video Disk Recorder) on Klaus Schmidingerin kehittämä ja ylläpitämä digitv-ohjelmisto Linuxille. Itse VDR-ohjelman kehitystyö etenee Schmidingerin omien päämäärien mukaan, mutta VDR:llä on Euroopassa laajahko käyttäjäyhteisö, joka on luonut ohjelmaan lukuisia liitännäisiä. Lisää tietoa VDR:stä saa mm. seuraavilta sivuilta:

[http://linux.fi/wiki/VDR]
[
http://www.linuxtv.org/vdrwiki/index.php/Main_Page]
[[http://www.tvdr.de|VDR]] (Video Disk Recorder) on Klaus Schmidingerin kehittämä ja ylläpitämä digitv-ohjelmisto Linuxille. Itse VDR-ohjelman kehitystyö etenee Schmidingerin omien päämäärien mukaan, mutta VDR:llä on Euroopassa laajahko käyttäjäyhteisö, joka on luonut ohjelmaan lukuisia liitännäisiä. Lisää tietoa VDR:stä saa mm. seuraavilta sivuilta:

http://linux.fi/wiki/VDR http://www.linuxtv.org/vdrwiki/index.php/Main_Page
Line 16: Line 16:
Line 21: Line 20:
Oletamme, että olet saanut asennettua jo Ubuntu-linuxin, mikäli et, niin silloin auttaneen Ubuntun asennusohje:
[http://wiki.ubuntu-fi.org/Asentaminen]
Oletamme, että olet jo asentanut Ubuntun ja se toimii ilman isompia murheita. Ongelmiin saa apua esimerkiksi Ubuntu Suomen [[url=http://forum.ubuntu-fi.org/index.php|keskustelualueilta]].
Line 27: Line 24:
Aluksi asennamme epävirallisia ppa:ohjelmalähteitä. ppa-tiedostolähteet eivät ole Ubuntun virallisia ohjelmalähteitä, joten omalla vastuulla mennään. Mikäli foliohattu ei anna periksi, niin tämän kohdan voi jättää pois. Tosin silloin .ts-tiedoston tallennus jää haaveeksi, ja joutuu tyytymään vdr:n omaan formaattiin. Lisäksi .ts-tiedostojen käsittelyä koskevat kohdat eivät toimi.

==== Varsinainen epävirallisten (ohjelma/paketti)lähteiden asentaminen ====
VDR on asennettavissa suoraan Ubuntun virallisista ohjelmalähteistä, mutta laajempi paketointi on saatavilla yaVDR-jakelun PPA:sta. Kirjoitushetkellä (heinäkuu 2014) yaVDR:n [[https://launchpad.net/~yavdr/+archive/ubuntu/stable-vdr|stable-vdr-PPA:ssa]] ei vielä ole paketteja Ubuntu 14.04:lle. Sen sijaan voi kokeilla [[https://launchpad.net/~yavdr/+archive/ubuntu/testing-vdr|testing-vdr:ää]]. YaVDR:n paketointien etuna on huomattavasti suurempi määrä liitännäisiä, XBMC-integrointi ja Xine-pohjaisten edustaohjelmien tuki videon rautapurulle VDPAU-rajapinnan kautta myös Ubuntu 12.04:ssä.

Ohjeen seuraavat vaiheet soveltuvat molempien VDR-paketointien asentamiseen, joten jos haluat käyttää Ubuntun virallisia paketteja, ohita yaVDR:n repositorioiden käyttöönotto ja siirry kohtaan '''VDR:n perusasennus'''.

==== yaVDR:n stable-vdr-repositorion käyttöönotto (Ubuntu 12.04) ====
Line 31: Line 31:
Line 33: Line 34:
}}}

==== Otetaan pakettilähteet l. repositiot käyttöön ja tutkitaan päivityksiä...
{{{
sudo add-apt-repository ppa:yavdr/main
Line 40: Line 38:
== VDR:n perusasennus päätteessä == ==== yaVDR:n testing-vdr-repositorion käyttöönotto (Ubuntu 14.04) ====

Ubuntu 14.04:ssä on toistaiseksi käytettävä stable-vdr:n sijaan testing-vdr:ää. Tätä komentoa ei pidä ajaa, jos otit jo stable-vdr:n käyttöön.

{{{
sudo add-apt-repository ppa:yavdr/testing-vdr
sudo add-apt-repository ppa:yavdr/main
sudo apt-get update
}}}

== VDR:n perusasennus ==
Line 42: Line 51:
Line 46: Line 56:
Asennusskripti kysyy, tehdäänkö '''tallenteille''' hakemisto '/var/lib/video.00'. Se kannattaa hyväksyä, jos sijainti käy (eli juuriosiolla on tilaa). '''Sijainnin voi muuttaa jälkeenpäin lisäämällä /etc/default/vdr -tiedostoon rivin VIDEO_DIR="''/polku/videohakemistoon''"'''. Tällöin on kuitenkin huolehdittava, että hakemiston omistaja ja ryhmä on vdr. VDR:n riippuvuutena asentuu mm. '''LIRC''' (Linux Infrared Remote Control), jonka asennusskripti kysyy kaukosäätimistä. Jos käytössäsi on kaukosäädin ja vastaanotin, valitse oikea laite listalta. Muuten voit valita '''None'''. Valinnat voi tehdä uudestaan milloin tahansa myöhemminkin komennolla '''sudo dpkg-reconfigure lirc'''

Vanhemmissa paketoinneissa VDR:n asetusskripti kysyy myös
, tehdäänkö '''tallenteille''' hakemisto '/var/lib/video.00'. Se kannattaa hyväksyä, jos sijainti käy (eli juuriosiolla on tilaa). '''Sijainnin voi muuttaa jälkeenpäin lisäämällä /etc/default/vdr -tiedostoon rivin VIDEO_DIR="''/polku/videohakemistoon''"'''. Tällöin on kuitenkin huolehdittava, että hakemiston omistaja ja ryhmä on '''vdr'''.
Line 51: Line 63:
Aluksi ja väliaikaisesti vdr otetaan pois päältä, jotta pystymme muuttamaan asetuksia:
Päätteessä:
{{{
sudo /etc/init.d/vdr stop
}}}

Editoi tiedostoa /etc/default/vdr pääkäyttäjänä eli aja päätteessä:
{{{
sudo /etc/ini

Sammutetaan ensin VDR-palvelu asetusten muuttamista varten, jos se sattuu olemaan jo käynnissä.

{{{
sudo service vdr stop
}}}

Muokkaa sitten tiedostoa '''/etc/default/vdr''' pääkäyttäjänä eli aja päätteessä:

{{{
Line 62: Line 75:

Vaihda rivillä "''ENABLED=0''" 0:n tilalle 1, jotta VDR käynnistyy koneen käynnistämisen yhteydessä, ja "''ENABLE_SHUTDOWN=1''" 1:n tilalle 0, jottei tietokone yllättäen sammu:
Muutosten jälkeen tiedosto saattaa olla tällainen:
{{{
Vaihda rivillä "''ENABLED=0''" 0:n tilalle 1, jotta VDR käynnistyy koneen käynnistämisen yhteydessä. Varmista myös, että "''ENABLE_SHUTDOWN''" on asetettu 0:ksi, jottei tietokone yllättäen sammu silloin, kun VDR:ää ei käytetä aktiivisesti. Muutosten jälkeen tiedoston pitäisi näyttää tältä:

{{{
# /etc/default/vdr
#
# See also /usr/share/doc/vdr/README.Debian.gz
#

# Change to 1 to enable vdr's init-script
Line 76: Line 94:
Tallenna tiedosto: CTRL-O, sulje editori: CTRL-X
Tallenna tiedosto näppäinyhdistelmällä CTRL+O ja sulje editori CTRL+X:llä.
Line 80: Line 99:
Line 83: Line 103:
Line 88: Line 107:
Line 93: Line 113:
Tarkista skannauksen jälkeen, että ''channels.conf''issa on kaikki saatavilla olevat kanavat. Jos jokin kanavanippu puuttuu kokonaan, tarkista että sen taajuus on scanille annetussa initial-tuning-tiedostossa. Oikeat taajuudet saa yleensä operaattorin nettisivulta (DVB-T: [http://www.digitv.fi], Welho DVB-C: [http://dvb.swelcom.fi/]). Tarkista skannauksen jälkeen, että ''channels.conf''issa on kaikki saatavilla olevat kanavat. Jos jokin kanavanippu puuttuu kokonaan, tarkista että sen taajuus on scanille annetussa initial-tuning-tiedostossa. Oikeat taajuudet saa yleensä operaattorin nettisivulta (DVB-T: http://www.digitv.fi, Welho DVB-C: http://dvb.swelcom.fi/).

Vaihtoehtoisesti skannauksen voi tehdä w_scan-ohjelmalla, joka skannaa koko taajuusalueen läpi, eikä vaadi esimääriteltyjä kanavanippuja. Asennus:

{{{
sudo apt-get install w-scan
}}}

Antenniverkon skannaus:

{{{
cd ~
w_scan -ft -c FI > channels.conf
sudo cp channels.conf /var/lib/vdr/
}}}

Kaapeliverkon skannaus:

{{{
cd ~
w_scan -fc -c FI > channels.conf
sudo cp channels.conf /var/lib/vdr/
}}}
Line 97: Line 139:
{{{
sudo /etc/init.d/vdr start
}}}

=== Liven koekäyttö ===
Tässä vaiheessa voit avata selaimeen Live-liitännäisen sivun: [http://localhost:8008] (käyttäjätunnus: ''admin'', salasana: ''live'')
Kirjautumisen saat pois Liven asetuksista. Ottaessasi yhteyden joltain toiselta koneelta, on localhostin sijaan tietysti käytettävä VDR-koneen ulkoista IP-osoitetta tai nimeä.

{{{
sudo service vdr start
}}}

=== VDR Live web-käyttöliittymä ===
Tässä vaiheessa voit avata selaimeen Live-liitännäisen sivun: http://localhost:8008 (käyttäjätunnus: ''admin'', salasana: ''live'') Kirjautumisen saat pois Liven asetuksista. Ottaessasi yhteyden joltain toiselta koneelta, on localhostin sijaan tietysti käytettävä VDR-koneen ulkoista IP-osoitetta tai nimeä.
Line 107: Line 149:
=== Xineliboutput koekäyttö === === Katselu Xineliboutputilla ===
Line 113: Line 155:
Line 118: Line 161:
Lisää ohjeistusta on käyttöoppaassa: [http://www.linuxtv.org/vdrwiki/index.php/VDR_User's_Manual]
Line 122: Line 164:
=== Uuden liitännäisen asentaminen ===
Asennetaan streamdev-palvelu:

Lisäohjeistusta VDR:n käyttöliittymän hallintaan on käyttöoppaassa: http://www.linuxtv.org/vdrwiki/index.php/VDR_User's_Manual


==== Xineliboutput ja VDPAU ====

VDPAU-rautapurun saa käyttöön seuraavilla parametreilla, näytönohjaimen ajurin puitteissa:

{{{
vdr-sxfe --video vdpau --post=tvtime:method=use_vo_driver
}}}

VDPAU:n tapauksessa lomituksenpoiston parametreja voi säätää vdr-sxfe:n luomassa tiedostossa ~/.xine/config_xineliboutput. Lomituksenpoisto toimii VDPAU:n kautta kunnolla vain Nvidian suljetulla ajurilla. Muut näytönohjaimet ja ajurit tukevat todennäköisesti korkeintaan bob-tasoista lomituksenpoistoa.

{{{
nano ~/.xine/config_xineliboutput
}}}

Olennaiset kohdat ovat '''vdpau: HD deinterlace method''' ja '''vdpau: SD deinterlace method'''. Parasta laatua saa asetuksella temporal_spatial, mutta HD-videon kanssa se vaatii alinta budjettiluokkaa tehokkaamman näytönohjaimen. Esimerkiksi Geforce GT 220, 430 tai 630 riittää, kun taas GT 210 ja 520 ovat liian hitaita.

{{{
# vdpau: HD deinterlace method
# { bob half temporal half temporal_spatial temporal temporal_spatial }, default: 3
video.output.vdpau_hd_deinterlace_method:temporal_spatial

# vdpau: disable deinterlacing when progressive_frame flag is set
# bool, default: 0
#video.output.vdpau_honor_progressive:0

# vdpau: SD deinterlace method
# { bob half temporal half temporal_spatial temporal temporal_spatial }, default: 3
video.output.vdpau_sd_deinterlace_method:temporal_spatial
}}}

Tallenna taas muutosten jälkeen tiedosto näppäinyhdistelmällä Ctrl+O ja sulje editori Ctrl+X:llä.



=== Streamdev-server-liitännäisen asentaminen ===

Streamdev-palvelun avulla livelähetyksiä voi streamata VDR:stä lähiverkkoon ja katsella esimerkiksi VLC:llä muilla tietokoneilla tai MX Playerillä Android-laitteissa. Myös muut MPEG-TS:ää tukevat mediatoistimet voivat näyttää lähetykset, mutta Ylen DVB-tekstitykset eivät näy useimmilla laitteilla ja ohjelmilla.

Liitännäisen asennus:
Line 128: Line 212:
Line 132: Line 217:
Line 141: Line 227:
{{{
sudo /etc/init.d/vdr stop
sudo /etc/init.d/vdr start

{{{
sudo service vdr stop
sudo service vdr start
Line 146: Line 233:
Line 149: Line 237:
Tai suuntaa selain osoitteeseen [http://localhost:3000]
Kanavien streamdev-osoitteet saa myös Liven kautta.
Tai suuntaa selain osoitteeseen http://localhost:3000 Kanavien streamdev-osoitteet saa myös Liven kautta.
Line 154: Line 241:
{{{
sudo /etc/init.d/vdr stop
}}}

{{{
sudo service vdr stop
}}}
Line 159: Line 246:
Line 162: Line 250:
Line 164: Line 251:
Line 171: Line 259:
{{{
sudo /etc/init.d/vdr start
}}}

{{{
sudo service vdr start
}}}
Line 179: Line 267:
Line 183: Line 272:
Line 186: Line 274:
Line 189: Line 278:
Line 191: Line 279:
Line 194: Line 283:
Line 196: Line 284:
{{{
#include <stdio.h> 

{{{
#include <stdio.h>
Line 199: Line 288:

int main (int count, char **args) { 
        char *c; 
        int i,j;   char row[5000];
 char kinoteema[]="T Kino Teema: ";
 char kinokauko[]="T Kino Kauko: ";
 char elokuva[]="T Elokuva: ";
 char toiminta[]="T Toimintatorstai: ";
 row[0]=0;
        if(count>1) {                  i=0;
  
j=0;
  if(memcmp(args[1],kinoteema,strlen(kinoteema))==0) j=strlen(kinoteema)-2;
int main (int count, char **args) {
        char *c;
        int i,j;
        
char row[5000];
        char kinoteema[]="T Kino Teema: ";
        char kinokauko[]="T Kino Kauko: ";
        char elokuva[]="T Elokuva: ";
        char toiminta[]="T Toimintatorstai: ";
        row[0]=0;
        if(count>1) {
                i=0;
                
j=0;
                if(memcmp(args[1],kinoteema,strlen(kinoteema))==0) j=strlen(kinoteema)-2;
Line 216: Line 304:
                for (c=args[1]+j;*c!=(char)0;c++) { 
                        if(*c!=(char)0xc3) row[i++]=*c; 
                        else { 
                                c++; 
                                if(*c==(char)0xb6) row[i++]='o';//'ö' 
                                if(*c==(char)0xa4) row[i++]='a';//'ä' 
                                if(*c==(char)0xa5) row[i++]='a';//'ä' 
                                if(*c==(char)0x96) row[i++]='O';//'Ö' 
                                if(*c==(char)0x84) row[i++]='A';//'Ä' 
                                if(*c==(char)0x85) row[i++]='A';//'Å' 
                        } 
                }    row[i++]=0;
  row[i]=0;
  i=0;
  for(j=1;row[j]!='\0';j++) {
   if((row[j]==' ')||(row[j]=='+')
    ||(row[j]=='-')
    ||(row[j]==',')
    ||(row[j]=='.')
    ||(row[j]==':')
    ||(row[j]==';')
    ||(row[j]=='!')
    ||(row[j]=='?')
    ||(row[j]=='/')
    ||(row[j]=='|')
    
||(row[j]=='#')
    ||(row[j]=='<')
    ||(row[j]=='\\')
    ||(row[j]=='>')) {
     while ( ((row[j]<'0')||(row[j]>'9'))&&
      ((row[j]<'A')||(row[j]>'Z'))&&
      ((row[j]<'a')||(row[j]>'z'))&&
       (row[j]!='\0')&&
       (row[j]!='-')&&
       (row[j]!='!')&&
       (row[j]!='+')) j++;
     if((row[j]>='a')&&(row[j]<='z')) row[i++]=row[j]&223;
     else row[i++]=row[j];
   } else {
    while ( ((row[j]<'0')||(row[j]>'9'))&&
     ((row[j]<'A')||(row[j]>'Z'))&&
     ((row[j]<'a')||(row[j]>'z'))&&
      (row[j]!=0)) j++;
    row[i++]=row[j];
    //printf("%i,%i",i,j);
   }
  }
  row[i]=0;
  printf("%s",row);
        }  
        return 0; 
                for (c=args[1]+j;*c!=(char)0;c++) {
                        if(*c!=(char)0xc3) row[i++]=*c;
                        else {
                                c++;
                                if(*c==(char)0xb6) row[i++]='o';//'ö'
                                if(*c==(char)0xa4) row[i++]='a';//'ä'
                                if(*c==(char)0xa5) row[i++]='a';//'ä'
                                if(*c==(char)0x96) row[i++]='O';//'Ö'
                                if(*c==(char)0x84) row[i++]='A';//'Ä'
                                if(*c==(char)0x85) row[i++]='A';//'Å'
                        }
                }
                
row[i++]=0;
                row[i]=0;
                i=0;
                for(j=1;row[j]!='\0';j++) {
                        if((row[j]==' ')||(row[j]=='+')
                                ||(row[j]=='-')
                                ||(row[j]==',')
                                ||(row[j]=='.')
                                ||(row[j]==':')
                                ||(row[j]==';')
                                ||(row[j]=='!')
                                ||(row[j]=='?')
                                ||(row[j]=='/')
                                ||(row[j]=='|')
                                
||(row[j]=='#')
                                ||(row[j]=='<')
                                ||(row[j]=='\\')
                                ||(row[j]=='>')) {
                                        while ( ((row[j]<'0')||(row[j]>'9'))&&
                                                ((row[j]<'A')||(row[j]>'Z'))&&
                                                ((row[j]<'a')||(row[j]>'z'))&&
                                                 (row[j]!='\0')&&
                                                 (row[j]!='-')&&
                                                 (row[j]!='!')&&
                                                 (row[j]!='+')) j++;
                                        if((row[j]>='a')&&(row[j]<='z')) row[i++]=row[j]&223;
                                        else row[i++]=row[j];
                        } else {
                                while ( ((row[j]<'0')||(row[j]>'9'))&&
                                        ((row[j]<'A')||(row[j]>'Z'))&&
                                        ((row[j]<'a')||(row[j]>'z'))&&
                                         (row[j]!=0)) j++;
                                row[i++]=row[j];
                                //printf("%i,%i",i,j);
                        }
                }
                row[i]=0;
                printf("%s",row);
        }
        return 0;
Line 273: Line 361:
Line 276: Line 365:
Line 278: Line 366:
Line 281: Line 370:
Line 283: Line 371:
Line 289: Line 378:
{{{
sudo nano /usr/local/copyvdrs/copyvdrs.sh
}}}

{{{
sudo nano /usr/local/bin/copyvdrs/copyvdrs.sh
}}}
Line 294: Line 383:
Line 301: Line 391:
/etc/init.d/vdr stop service vdr stop
Line 305: Line 395:
 toname="`cat "$f"|grep "^T "`"
 toname=`/usr/local/copyvdrs/upcase "$toname"`
 #echo "$toname"
 filmfilename="${f%info}0000"
 #echo "$filmfilename"
 i="1"
 echo "$toname"
 
if [ "$USER" = "root" ]
 then
  
mv "$f" "$topath$toname.info"
  chown $user:$group "$topath$toname.info"
  mv "$filmfilename$i.ts" "$topath$toname.ts"
  #rm "$filmfilename$i.ts"
  #rm "$f"
 else
  cp "$f" "$topath$toname.info"
  
chown $user:$group "$topath$toname.info"
  cp "$filmfilename$i.ts" "$topath$toname.ts"
 fi
 
i="$i+1"
 while [[ -e "$filmfilename$i.ts" ]]
 do
  #echo "$filmfilename$i.ts"
  cat "$filmfilename$i.ts" >>"$topath$toname.ts"
  if [ "$USER" = "root" ]
  then
   rm "$filmfilename$i.ts"
  fi
  
i="$i+1"
 done
 chown $user:$group "$topath$toname.ts"
        toname="`cat "$f"|grep "^T "`"
        toname=`/usr/local/bin/copyvdrs/upcase "$toname"`
        #echo "$toname"
        filmfilename="${f%info}0000"
        #echo "$filmfilename"
        i="1"
        echo "$toname"
        
if [ "$USER" = "root" ]
        then
                
mv "$f" "$topath$toname.info"
                chown $user:$group "$topath$toname.info"
                mv "$filmfilename$i.ts" "$topath$toname.ts"
                #rm "$filmfilename$i.ts"
                #rm "$f"
        else
                cp "$f" "$topath$toname.info"
                
chown $user:$group "$topath$toname.info"
                cp "$filmfilename$i.ts" "$topath$toname.ts"
        fi
        
i="$i+1"
        while [[ -e "$filmfilename$i.ts" ]]
        do
                #echo "$filmfilename$i.ts"
                cat "$filmfilename$i.ts" >>"$topath$toname.ts"
                if [ "$USER" = "root" ]
                then
                        rm "$filmfilename$i.ts"
                fi
                
i="$i+1"
        done
        chown $user:$group "$topath$toname.ts"
Line 338: Line 428:
/etc/init.d/vdr start service vdr start
Line 341: Line 431:

Scriptistä tulee muuttaa alussa olevat seuraavat rivit:
topath - tämän tilalle tulee lainausmerkkien sisälle kirjoittaa, minne haluat tallettaa elokuvat.
user - Oma käyttäjätunnuksesi
group - Oma kayttäjätunnuksesi ryhmä
cd /var/lib/video.00 - tilalle minkä juuresta löytyy todellisuudessa VDR:n tallentamat tiedostot.
Scriptistä tulee muuttaa alussa olevat seuraavat rivit: topath - tämän tilalle tulee lainausmerkkien sisälle kirjoittaa, minne haluat tallettaa elokuvat. user - Oma käyttäjätunnuksesi group - Oma kayttäjätunnuksesi ryhmä cd /var/lib/video.00 - tilalle minkä juuresta löytyy todellisuudessa VDR:n tallentamat tiedostot.

'''VAROITUS:''' Scriptissä on rivi ''''rm -r *'''', joka tuhoaa kaiken siinä hakemistossa, jossa on ja sen alahakemistoissa. Tämä käsky vaarallisuuden takia tulee poistaa ennen kuin scriptiä kokeilee. Kun scriptin on saanut toimivaksi voi kyseisen rivin lisätä kyseiseen kohtaan. Huonosti toimiessaan scripti siis saattaa pahimmassa tapauksessa tuhota koko järjestelmän tiedostoineen.
Line 349: Line 436:
{{{
sudo chmod 755 /usr/local/copyvdrs/copyvdrs.sh
}}}

{{{
sudo chmod 755 /usr/local/bin/copyvdrs/copyvdrs.sh
}}}
Line 354: Line 441:
{{{
/usr/local/copyvdrs/copyvdrs.sh
}}}

{{{
sudo /usr/local/bin/copyvdrs/copyvdrs.sh
}}}

VDR:n asentaminen Ubuntuun (12.04 - 14.04)

Ohje on kokoelma nm:n aloittamasta Ubuntu-fi-foorumilla julkaistusta säikeestä: http://forum.ubuntu-fi.org/index.php?topic=29787.0, jonne keskustelu tästä wikistä voidaan keskittää. Kiitokset keskusteluun osallistujille ja nm:lle, että antoi jatko julkaista ohjeensa myös täällä wikissä.

Esitietoa VDR:stä

VDR (Video Disk Recorder) on Klaus Schmidingerin kehittämä ja ylläpitämä digitv-ohjelmisto Linuxille. Itse VDR-ohjelman kehitystyö etenee Schmidingerin omien päämäärien mukaan, mutta VDR:llä on Euroopassa laajahko käyttäjäyhteisö, joka on luonut ohjelmaan lukuisia liitännäisiä. Lisää tietoa VDR:stä saa mm. seuraavilta sivuilta:

http://linux.fi/wiki/VDR http://www.linuxtv.org/vdrwiki/index.php/Main_Page

VDR-paketoinnista Ubuntussa

Ubuntussa vdr-paketti sisältää ohjelman keskeisimmät toiminnot, mutta varsinainen käyttöliittymä toimii vain MPEG-2-dekooderilla ja TV-ulostulolla varustetuilla DVB-korteilla, joita ei enää valmisteta. Myös pääteohjaus TCP-portin 2001 kautta on mahdollista. VDR:ään saa X-ikkunoinnissa toimivan edustaohjelman asentamalla vdr-plugin-xineliboutput ja xineliboutput-sxfe -paketit. Xineliboutputin vdr-sxfe-ohjelma toimii myös verkon yli, mutta vaatii alleen Unix-tyyppisen käyttöjärjestelmän.

Muita yleishyödyllisiä liitännäisiä:

  • vdr-plugin-live - selaimen kautta toimiva web-käyttöliittymä

  • vdr-plugin-epgsearch - hakuajastustoimintoja mm. live-liitännäiselle

  • vdr-plugin-streamdev-server - tarjoaa suoran lähetyksen lähiverkon (tai Internetin) yli mediasoittimiin. VLC osaa näyttää tekstitykset streamdevin MPEG-TS-lähetteestä.

dvb-apps tärkeä VDR:n ulkopuolinen paketti

Lisäksi tarvitaan dvb-apps-paketti, jossa on scan-työkalu kanavien hakemista varten. Tätä tarvitaan periaatteessa vain kerran. Kun VDR saa oikeat tiedot edes yhdestä kanavasta, se osaa itse lukea muiden kanavien ja kanavanippujen tiedot. Automaattista kanavatietojen päivitystä voi halutessaan säätää VDR:n asetuksista.

Varsinaiseen asennukseen

Oletamme, että olet jo asentanut Ubuntun ja se toimii ilman isompia murheita. Ongelmiin saa apua esimerkiksi Ubuntu Suomen keskustelualueilta.

Epävirallisten pakettilähteiden asentaminen

VDR on asennettavissa suoraan Ubuntun virallisista ohjelmalähteistä, mutta laajempi paketointi on saatavilla yaVDR-jakelun PPA:sta. Kirjoitushetkellä (heinäkuu 2014) yaVDR:n stable-vdr-PPA:ssa ei vielä ole paketteja Ubuntu 14.04:lle. Sen sijaan voi kokeilla testing-vdr:ää. YaVDR:n paketointien etuna on huomattavasti suurempi määrä liitännäisiä, XBMC-integrointi ja Xine-pohjaisten edustaohjelmien tuki videon rautapurulle VDPAU-rajapinnan kautta myös Ubuntu 12.04:ssä.

Ohjeen seuraavat vaiheet soveltuvat molempien VDR-paketointien asentamiseen, joten jos haluat käyttää Ubuntun virallisia paketteja, ohita yaVDR:n repositorioiden käyttöönotto ja siirry kohtaan VDR:n perusasennus.

yaVDR:n stable-vdr-repositorion käyttöönotto (Ubuntu 12.04)

Päätteessä:

sudo add-apt-repository ppa:yavdr/stable-vdr
sudo add-apt-repository ppa:yavdr/main
sudo apt-get update

yaVDR:n testing-vdr-repositorion käyttöönotto (Ubuntu 14.04)

Ubuntu 14.04:ssä on toistaiseksi käytettävä stable-vdr:n sijaan testing-vdr:ää. Tätä komentoa ei pidä ajaa, jos otit jo stable-vdr:n käyttöön.

sudo add-apt-repository ppa:yavdr/testing-vdr
sudo add-apt-repository ppa:yavdr/main
sudo apt-get update

VDR:n perusasennus

Päätteessä:

sudo apt-get install vdr vdr-plugin-epgsearch vdr-plugin-live vdr-plugin-xineliboutput xineliboutput-sxfe dvb-apps

VDR:n riippuvuutena asentuu mm. LIRC (Linux Infrared Remote Control), jonka asennusskripti kysyy kaukosäätimistä. Jos käytössäsi on kaukosäädin ja vastaanotin, valitse oikea laite listalta. Muuten voit valita None. Valinnat voi tehdä uudestaan milloin tahansa myöhemminkin komennolla sudo dpkg-reconfigure lirc

Vanhemmissa paketoinneissa VDR:n asetusskripti kysyy myös, tehdäänkö tallenteille hakemisto '/var/lib/video.00'. Se kannattaa hyväksyä, jos sijainti käy (eli juuriosiolla on tilaa). Sijainnin voi muuttaa jälkeenpäin lisäämällä /etc/default/vdr -tiedostoon rivin VIDEO_DIR="/polku/videohakemistoon". Tällöin on kuitenkin huolehdittava, että hakemiston omistaja ja ryhmä on vdr.

Paketointiin liittyvät ohjeet ovat tiedostossa /usr/share/doc/vdr/README.Debian.gz. Se kannattaa silmäillä läpi.

Ota VDR käyttöön

Sammutetaan ensin VDR-palvelu asetusten muuttamista varten, jos se sattuu olemaan jo käynnissä.

sudo service vdr stop

Muokkaa sitten tiedostoa /etc/default/vdr pääkäyttäjänä eli aja päätteessä:

sudo nano /etc/default/vdr

Vaihda rivillä "ENABLED=0" 0:n tilalle 1, jotta VDR käynnistyy koneen käynnistämisen yhteydessä. Varmista myös, että "ENABLE_SHUTDOWN" on asetettu 0:ksi, jottei tietokone yllättäen sammu silloin, kun VDR:ää ei käytetä aktiivisesti. Muutosten jälkeen tiedoston pitäisi näyttää tältä:

# /etc/default/vdr
#
# See also /usr/share/doc/vdr/README.Debian.gz
#

# Change to 1 to enable vdr's init-script
ENABLED=1

# Change this to 1 if you want vdr to be able to shutdown the
# computer
ENABLE_SHUTDOWN=0

# Options that will be passed to vdr's commandline
# for example: OPTIONS="-w 15"
OPTIONS="-w 60"

Tallenna tiedosto näppäinyhdistelmällä CTRL+O ja sulje editori CTRL+X:llä.

Kopioi Xineliboutputin esimerkkinäppäinkartta VDR:n remote.conf-tiedostoon, jotta VDR:ää voi ohjata näppäimistöllä vdr-sxfe:n kautta

Päätteessä:

sudo cp /usr/share/doc/vdr-plugin-xineliboutput/examples/remote.conf.example /var/lib/vdr/remote.conf

Skannaa kanavat

Initial-tuning-tiedosto /usr/share/dvb/dvb-t/fi-Espoo sisältää Espoon lähettimen kanavanippujen keskitaajuudet. Valitse oikea tiedosto lähetysverkon tyypin ja sijainnin perusteella. Esimerkiksi TTV:n kaapeliverkon tiedosto on /usr/share/dvb/dvb-c/fi-TTV. Syötä valitsemasi tai muokkaamasi tiedosto scan-työkalulle:

Päätteessä:

cd ~
scan -o vdr -p -e 4 /usr/share/dvb/dvb-t/fi-Espoo > channels.conf
sudo cp channels.conf /var/lib/vdr/

Tarkista skannauksen jälkeen, että channels.confissa on kaikki saatavilla olevat kanavat. Jos jokin kanavanippu puuttuu kokonaan, tarkista että sen taajuus on scanille annetussa initial-tuning-tiedostossa. Oikeat taajuudet saa yleensä operaattorin nettisivulta (DVB-T: http://www.digitv.fi, Welho DVB-C: http://dvb.swelcom.fi/).

Vaihtoehtoisesti skannauksen voi tehdä w_scan-ohjelmalla, joka skannaa koko taajuusalueen läpi, eikä vaadi esimääriteltyjä kanavanippuja. Asennus:

sudo apt-get install w-scan

Antenniverkon skannaus:

cd ~
w_scan -ft -c FI > channels.conf
sudo cp channels.conf /var/lib/vdr/

Kaapeliverkon skannaus:

cd ~
w_scan -fc -c FI > channels.conf
sudo cp channels.conf /var/lib/vdr/

Käynnistä VDR

Päätteessä:

sudo service vdr start

VDR Live web-käyttöliittymä

Tässä vaiheessa voit avata selaimeen Live-liitännäisen sivun: http://localhost:8008 (käyttäjätunnus: admin, salasana: live) Kirjautumisen saat pois Liven asetuksista. Ottaessasi yhteyden joltain toiselta koneelta, on localhostin sijaan tietysti käytettävä VDR-koneen ulkoista IP-osoitetta tai nimeä.

Jos Live toimii ja näyttää ohjelmatiedot, ollaan jo loppusuoralla. Jos taas ohjelmatietoja ja kanavia ei näy, jokin on pielessä. Ongelmaa kannattaa lähteä purkamaan tutkimalla järjestelmälokin loppupäätä: sudo cat /var/log/syslog | tail -100

Katselu Xineliboutputilla

Xineliboutputin X-frontend käynnistyy komennolla vdr-sxfe (jos ei toimi, kokeile antaa myös osoite: vdr-sxfe xvdr://localhost:37890).

Ohjelma sulkeutuu Esc-näppäimellä. F1 avaa päävalikon ja F2-F5 hoitavat värinäppäinten virkaa. Kuvaruutunäytön alareunassa näkyy värinäppäimiin liitetyt toiminnot, jotka vaihtuvat käyttöliittymän tilan mukaan. Kanavat vaihtuvat suoraan numeroilla tai Ylös/Alas-nuolinäppäimillä (valikon ollessa auki Page Up/Down -näppäimillä). Hiiren kaksoisnäpäytys suurentaa ikkunan kokoruutuun tai takaisin pieneksi. Vdr-sxfe:n saa kokoruutuun käynnitettäessä paramerilla -f.

Koska osa TV-lähetyksistä on lomitettua videota, vdr-sxfe:n kanssa on hyvä käyttää lomituksenpoistosuodinta. Tavallisella xv-ulostulolla se onnistuu parhaiten näin:

vdr-sxfe --post=tvtime:method=Greedy2Frame,enabled=1,framerate_mode=full,cheap_mode=0

Komennon voi sijoittaa skriptiin tai pikakäynnistimeen. Jos tuntuu, ettei koneen teho riitä tai näytönohjaimen ajuri on hidas, aseta framerate_mode=half. Suorittimen käyttöastetta ja eri prosessien aiheuttamaa kuormaa kannattaa seurata ajon aikana Järjestelmän valvonnalla (Jäjestelmä -> Ylläpito -> Järjestelmän valvonta) tai päätteessä top- tai htop-ohjelmalla.

Katso myös Xineliboutputin ohjetiedosto: /usr/share/doc/vdr-plugin-xineliboutput/README.gz

Lisäohjeistusta VDR:n käyttöliittymän hallintaan on käyttöoppaassa: http://www.linuxtv.org/vdrwiki/index.php/VDR_User's_Manual

Xineliboutput ja VDPAU

VDPAU-rautapurun saa käyttöön seuraavilla parametreilla, näytönohjaimen ajurin puitteissa:

vdr-sxfe --video vdpau --post=tvtime:method=use_vo_driver

VDPAU:n tapauksessa lomituksenpoiston parametreja voi säätää vdr-sxfe:n luomassa tiedostossa ~/.xine/config_xineliboutput. Lomituksenpoisto toimii VDPAU:n kautta kunnolla vain Nvidian suljetulla ajurilla. Muut näytönohjaimet ja ajurit tukevat todennäköisesti korkeintaan bob-tasoista lomituksenpoistoa.

nano ~/.xine/config_xineliboutput

Olennaiset kohdat ovat vdpau: HD deinterlace method ja vdpau: SD deinterlace method. Parasta laatua saa asetuksella temporal_spatial, mutta HD-videon kanssa se vaatii alinta budjettiluokkaa tehokkaamman näytönohjaimen. Esimerkiksi Geforce GT 220, 430 tai 630 riittää, kun taas GT 210 ja 520 ovat liian hitaita.

# vdpau: HD deinterlace method
# { bob  half temporal  half temporal_spatial  temporal  temporal_spatial }, default: 3
video.output.vdpau_hd_deinterlace_method:temporal_spatial

# vdpau: disable deinterlacing when progressive_frame flag is set
# bool, default: 0
#video.output.vdpau_honor_progressive:0

# vdpau: SD deinterlace method
# { bob  half temporal  half temporal_spatial  temporal  temporal_spatial }, default: 3
video.output.vdpau_sd_deinterlace_method:temporal_spatial

Tallenna taas muutosten jälkeen tiedosto näppäinyhdistelmällä Ctrl+O ja sulje editori Ctrl+X:llä.

Streamdev-server-liitännäisen asentaminen

Streamdev-palvelun avulla livelähetyksiä voi streamata VDR:stä lähiverkkoon ja katsella esimerkiksi VLC:llä muilla tietokoneilla tai MX Playerillä Android-laitteissa. Myös muut MPEG-TS:ää tukevat mediatoistimet voivat näyttää lähetykset, mutta Ylen DVB-tekstitykset eivät näy useimmilla laitteilla ja ohjelmilla.

Liitännäisen asennus:

sudo apt-get install vdr-plugin-streamdev-server

Yhteydenotot muilta koneilta on erikseen sallittava muokkaamalla /etc/vdr/plugins/streamdevhosts.conf -tiedostoa:

sudo nano /etc/vdr/plugins/streamdevhosts.conf

Kun lähiverkko on erotettu Internetistä palomuurilla, voidaan kotikäytössä sallia kaikki osoitteet. Poista #-merkki viimeiseltä riviltä:

127.0.0.1             # always accept localhost
#192.168.100.0/24     # any host on the local net
#204.152.189.113      # a specific host
0.0.0.0/0            # any host on any net (USE THIS WITH CARE!)

Tallenna tiedosto ja sulje editori.

Käynnistä VDR uudelleen:

sudo service vdr stop
sudo service vdr start

Nyt voit katsella suoraa lähetystä esimerkiksi VLC:llä. Kanava 4:

vlc http://localhost:3000/TS/4

Tai suuntaa selain osoitteeseen http://localhost:3000 Kanavien streamdev-osoitteet saa myös Liven kautta.

Suomenkielisyyden asettaminen EPG-tietoihin

Aluksi päätteen avulla suljemme vdr:n.

sudo service vdr stop

Editoimme tiedostoa /var/lib/vdr/setup.conf

sudo nano /var/lib/vdr/setup.conf

Sieltä muutamme EPGBugfixlevel ja EPGLanguages kohdat seuraavan laiseksi.

EPGBugfixLevel = 0
EPGLanguages = fin

Sitten tallennamme ja poistumme editorista.

Nyt voimme käynnistää VDR:n uudelleen.

sudo service vdr start

VDR:n tiedostojen siirtäminen ja uudelleen nimeäminen

Tässä esitellään yksinkertainen scripti, joka nimeää uudelleen VDR:n tiedostot ja siirtää ne toiseen kansioon VDR:n näkymättömiin jatkokäsittelyä varten. Tätä ei välttämättä tarvitse tehdä, ja tämä toimii varsin ongelmallisesti sarjojen tallennuksena, koska aina uusi sarjan jakso kirjoittaa vanhan päälle.

Aluksi luodaan /usr/local -kansioon copyvdrs-kansio päätteen avulla.

sudo mkdir /usr/local/bin
sudo mkdir /usr/local/bin/copyvdrs

Sitten tehdään upcase-ohjelma:

Aluksi asennetaan kääntämiseen tarvittavat paketit

sudo aptitude install build-essential gcc

sitten kirjoitetaan ohjelma:

nano upcase.c

Sisällöksi seuraavaa...

#include <stdio.h>
#include <string.h>
int main (int count, char **args) {
        char *c;
        int i,j;
        char row[5000];
        char kinoteema[]="T Kino Teema: ";
        char kinokauko[]="T Kino Kauko: ";
        char elokuva[]="T Elokuva: ";
        char toiminta[]="T Toimintatorstai: ";
        row[0]=0;
        if(count>1) {
                i=0;
                j=0;
                if(memcmp(args[1],kinoteema,strlen(kinoteema))==0) j=strlen(kinoteema)-2;
                if(memcmp(args[1],elokuva,strlen(elokuva))==0) j=strlen(elokuva)-2;
                if(memcmp(args[1],kinokauko,strlen(kinokauko))==0) j=strlen(kinokauko)-2;
                if(memcmp(args[1],toiminta,strlen(toiminta))==0) j=strlen(toiminta)-2;
                for (c=args[1]+j;*c!=(char)0;c++) {
                        if(*c!=(char)0xc3) row[i++]=*c;
                        else {
                                c++;
                                if(*c==(char)0xb6) row[i++]='o';//'ö'
                                if(*c==(char)0xa4) row[i++]='a';//'ä'
                                if(*c==(char)0xa5) row[i++]='a';//'ä'
                                if(*c==(char)0x96) row[i++]='O';//'Ö'
                                if(*c==(char)0x84) row[i++]='A';//'Ä'
                                if(*c==(char)0x85) row[i++]='A';//'Å'
                        }
                }
                row[i++]=0;
                row[i]=0;
                i=0;
                for(j=1;row[j]!='\0';j++) {
                        if((row[j]==' ')||(row[j]=='+')
                                ||(row[j]=='-')
                                ||(row[j]==',')
                                ||(row[j]=='.')
                                ||(row[j]==':')
                                ||(row[j]==';')
                                ||(row[j]=='!')
                                ||(row[j]=='?')
                                ||(row[j]=='/')
                                ||(row[j]=='|')
                                ||(row[j]=='#')
                                ||(row[j]=='<')
                                ||(row[j]=='\\')
                                ||(row[j]=='>')) {
                                        while ( ((row[j]<'0')||(row[j]>'9'))&&
                                                ((row[j]<'A')||(row[j]>'Z'))&&
                                                ((row[j]<'a')||(row[j]>'z'))&&
                                                 (row[j]!='\0')&&
                                                 (row[j]!='-')&&
                                                 (row[j]!='!')&&
                                                 (row[j]!='+')) j++;
                                        if((row[j]>='a')&&(row[j]<='z')) row[i++]=row[j]&223;
                                        else row[i++]=row[j];
                        } else {
                                while ( ((row[j]<'0')||(row[j]>'9'))&&
                                        ((row[j]<'A')||(row[j]>'Z'))&&
                                        ((row[j]<'a')||(row[j]>'z'))&&
                                         (row[j]!=0)) j++;
                                row[i++]=row[j];
                                //printf("%i,%i",i,j);
                        }
                }
                row[i]=0;
                printf("%s",row);
        }
        return 0;
}

Tallenna ja lopeta.

Sitten käännetään ohjelma:

sudo gcc upcase.c -o /usr/local/bin/copyvdrs/upcase

Sitten voimmekin testata ohjelman toimivuutta:

/usr/local/bin/copyvdrs/upcase "T Ääliö älä lyö mua"

Kyseisen suorittamisesta pitäisi promptin alkuun tulla seuraavaa...

AalioAlaLyoMua

Jos tuli jotain virheitä kysy neuvoa foorumista.

Kun tuo toimii, voimmekin tehdä voimallisen, mutta lyhyen scriptin tiedostojen siirtämiselle jatkokäsittelyä varten.

sudo nano /usr/local/bin/copyvdrs/copyvdrs.sh

Siihen kirjoitamme seuraavaa (pienin muutoksin).

declare -i i
topath="/home/peran/Videot/elokuvat/"
user="peran"
group="peran"
vanha=`pwd`
service vdr stop
cd /var/lib/video.00
for f in `find -name "info"`;
do
        toname="`cat "$f"|grep "^T "`"
        toname=`/usr/local/bin/copyvdrs/upcase "$toname"`
        #echo "$toname"
        filmfilename="${f%info}0000"
        #echo "$filmfilename"
        i="1"
        echo "$toname"
        if [ "$USER" = "root" ]
        then
                mv "$f" "$topath$toname.info"
                chown $user:$group "$topath$toname.info"
                mv "$filmfilename$i.ts" "$topath$toname.ts"
                #rm "$filmfilename$i.ts"
                #rm "$f"
        else
                cp "$f" "$topath$toname.info"
                chown $user:$group "$topath$toname.info"
                cp "$filmfilename$i.ts" "$topath$toname.ts"
        fi
        i="$i+1"
        while [[ -e "$filmfilename$i.ts" ]]
        do
                #echo "$filmfilename$i.ts"
                cat "$filmfilename$i.ts" >>"$topath$toname.ts"
                if [ "$USER" = "root" ]
                then
                        rm "$filmfilename$i.ts"
                fi
                i="$i+1"
        done
        chown $user:$group "$topath$toname.ts"
done
rm -r *
service vdr start
cd $vanha

Scriptistä tulee muuttaa alussa olevat seuraavat rivit: topath - tämän tilalle tulee lainausmerkkien sisälle kirjoittaa, minne haluat tallettaa elokuvat. user - Oma käyttäjätunnuksesi group - Oma kayttäjätunnuksesi ryhmä cd /var/lib/video.00 - tilalle minkä juuresta löytyy todellisuudessa VDR:n tallentamat tiedostot.

VAROITUS: Scriptissä on rivi 'rm -r *', joka tuhoaa kaiken siinä hakemistossa, jossa on ja sen alahakemistoissa. Tämä käsky vaarallisuuden takia tulee poistaa ennen kuin scriptiä kokeilee. Kun scriptin on saanut toimivaksi voi kyseisen rivin lisätä kyseiseen kohtaan. Huonosti toimiessaan scripti siis saattaa pahimmassa tapauksessa tuhota koko järjestelmän tiedostoineen.

Kun olet tehnyt muutokset, voitkin antaa tiedostolle suoritusoikeudet:

sudo chmod 755 /usr/local/bin/copyvdrs/copyvdrs.sh

Kun haluat kopioida tallennetut tiedostot haluamaasi hakemistoon, voit käskyttää päätteen avulla seuraavasti:

sudo /usr/local/bin/copyvdrs/copyvdrs.sh

Toisaalta, jos mediaPC:si on jatkuvasti auki, kannatta se käsky laittaa sopivaan aikaan suoritettavaksi crontab:ssa.