Ny HTPC på gang

Det har gått godt over tre år siden jeg skrev et av mine mest populære innlegg på denne bloggen, om «den perfekte HTPC». Den gangen var HD-avspilling den store utfordringen, det krevde en tildels dyr og kraftig CPU å spille av innhold i 1080p. I dag kan «alt» spille av HD, så man er ikke lenger så begrenset av hardware. Jeg kjører fortsatt XBMC på min trofaste Asrock NetTop ION 330, og det fungerer fortsatt helt flott, men det er et par «men».

  • Vifta (liten som den er) begynner å høres ganske godt.
  • DVD-ROM-stasjonen har dødd (selv om jeg knapt har brukt den).
  • Når jeg slår på noen av de tøffere effektene i XBMC begynner det å lugge.
  • Oppskalering av SD-materiale gir av og til litt hakkende avspilling.
  • Den har ikke innebygget IR-mottaker.
  • Den støtter ikke TV-signaler.

Det er det siste punktet som egentlig har plaget meg mest. Nå ser jeg ikke mye på TV, men i mangel av TV-tuner på HTPC-en så må man likevel en sjelden gang *grøss* bytte til en annen input på TV-en. Og fordi jeg har en litt aldrende forsterker, også på forsterkeren (ja, jeg vet det finnes produkter som Logitech Harmony, men for det første synes jeg de suger, og for det andre er det bare en workaround).

I det siste har det så skjedd et par ting som har gitt meg idéer og drømmer om en bedre HTPC. Men før jeg kommer inn på det må jeg nesten ramse opp hva jeg ønsker meg i en HTPC:

  • Fullstendig lydløs.
  • Pent og ryddig grensesnitt.
  • Støtte for full HD.
  • Støtte for HDPVR på digital kabel-TV.
  • Effektiv fjernkontroll.

Noen av disse punktene har jeg altså allerede, XBMC har et uovertruffent system for mediehåndtering og har rik støtte for ulike skins og plugins. Jeg kan ikke leve uten. Så, til de tingene som har skjedd i det siste.

En ny versjon av XBMC, med kodenavn «Frodo», vil ha støtte for TV-signaler og PVR (opptak)! Dette har stått på manges ønskeliste i mange, mange år, og ut fra det jeg ser på bilder så er integrasjonen veldig god! Andre nye ting som kommer i den nye versjonen av XBMC er støtte for «HD-lyd» (placebo for audiofile) og forbedringer i UPnP-støtten, som heller ikke er å kimse av.

Den andre tingen som har skjedd er at jeg i forbindelse med et prosjekt på jobben har hatt behov for å bygge et fullstendig vifteløst system med tildels kraftig CPU, og i den anledning har fått øynene opp for de vifteløse kabinettene fra Streacom. Disse kabinettene er tildels dyre, men det synes jeg er vel verdt det; de er pene å se på og de tillater deg å bygge en fullstendig vifteløs PC. De kommer med heatpipes som leder varmen ut i kabinettet. Det kabinettet jeg har testet har også støtte for étt full-størrelse PCIe-kort, som kommer godt med når man har tenkt å ha et TV-kort.

Så var det dette med TV-kort. Jeg har i kveld gjort en del research, og har funnet ut at det faktisk er étt eneste TV-kort som har støtte for Common Interface og fungerer på Linux, med det kryptiske navnet TBS6618. Så i kveld har man gått til spontan-innkjøp av dette, og jeg er veldig spent på hvordan det kommer til å fungere. Jeg kommer til å vente med å kjøpe resten av delene for min nye HTPC til etter at jeg har mottatt dette, for hvis det ikke fungerer så ser jeg ikke mye poeng i oppgraderingen.

Planen er i hvert fall å dokumentere fremgangen i mitt nye lille hobbyprosjekt her på bloggen.

How to fix blue tint in Flash videos on Linux without disabling hardware acceleration

So, I’ve been having this problem for a while now, where Youtube videos and some other videos will mess up the color channels for a video, and you get a blue tint on all videos, also known as the smurf effect. An example can be seen below:

Most of the solutions posted online for this problem involves disabling hardware acceleration, which is wildly undesirable, since, you know, this makes videos slow and sluggish, especially in fullscreen. Removing the faulty library, libvdpau, is also undesirable, since it is used in other video players than Flash.

But there is one solution, posted here, that lets you keep your hardware acceleration enabled, and fixes the smurfy colors. I keep forgetting the solution, though, hence this blog post. Hopefully, some other poor bugger (you?) is able to find it as well. Here’s the solution for Fedora 17 64-bit:

cd /usr/lib64/flash-plugin/
sudo perl -pi.bak -e 's/libvdpau/lixvdpau/g' libflashplayer.so

The directory where libflashplayer.so is stored may vary, you can find out where it is by doing something like this:

cd /usr
find . -name libflashplayer.so

What the command does is to change the string «libvdpau» to «lixvdpau» in libflashplayer.so, making it impossible to load that library. The performance will take a little hit, but not as much as disabling acceleration altogether.

Note: after each flash-update, you need to apply this fix again, as the file gets overwritten by the update. Hopefully libvdpau (or preferably flash itself, but don’t count on it) will get patched with a workaround for this annoying bug soon.

Nettfri dag

På årets siste dag så skal jeg prøve å holde meg helt unna nettet, om ikke annet fordi nettet går så sørgelig tregt her på Åsta (Ice.no mobilt «bredbånd»). Derfor (jeg tar ikke ansvar for et knukket system):

sudo apt-get install lighttpd dnsmasq
sudo sh -c 'echo "Nope!" > /var/www/index.html'
sudo sh -c 'echo "address=/#/127.0.0.1" > /etc/dnsmasq.d/catchall.conf'
sudo sh -c 'echo "prepend domain-name-servers 127.0.0.1;" >> /etc/dhcp/dhclient.conf'
sudo service network-manager restart
sudo service dnsmasq restart

Godt nyttår!

Pausefisk

Jeg har i lengre tid nå streamet live-video fra akvariet mitt hjemme. Herligheten finnes her: pausefisk.slaskete.net. Jeg har planer om å skrive mer i detalj om hvordan jeg har gått frem for å få til dette, men kort fortalt bruker jeg et HD-webcam fra Microsoft, tilkoblet en laptop med Ubuntu Linux, og så bruker jeg ffmpeg til å hente bilde fra kameraet og streame til en Darwin Streaming Server, som i sin tur mater bildet videre til Wowza Media Server, som står for flash- og HTML-streaming. Her er det altså teknologi fra mange aktører, og litt open source og kommersiell programvare i skjønn forening.

Skjermbilde av pausefiskJeg må på et eller annet tidspunkt lære meg litt mer om red5, slik at jeg kan ditche kommersielle produkter fullstendig i produksjonskjeden, men Wowza er et fantastisk godt produkt som er vel verdt penga. For ordens skyld, jeg benytter meg av Høgskolen i Gjøviks streamingserver.

Adding time stamp overlay to video stream using ffmpeg

I’ve been playing around with live streaming from ffmpeg recently, and my latest adventure was to try adding a time stamp to the feed. I searched Google for a solution, but couldn’t find a complete howto, so this is pieced together from information I found found all over the net.

Turns out, all the information you really need to get this working is already in the libavfilter documentation, I just didn’t read it carefully enough.

First of all you need to have a recent build of ffmpeg, with the --enable-libfreetype flag enabled. Just use this excellent howto, and add the flag yourself in the configure-step. You must also make sure to have the libfreetype-dev package installed. This is all provided you use a Debian or Ubuntu based distro, of course.

Once you have built ffmpeg you can check if you have the necessary filter installed with this command:

ffmpeg -filters | grep drawtext

That should print out the following line:

drawtext         Draw text on top of video frames using libfreetype library.

Now you should be able to do something like this:

ffmpeg -f video4linux2 -i /dev/video0 -s 640x480 -r 30 -vf \
"drawtext=fontfile=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf: \
text='\%T': fontcolor=white@0.8: x=7: y=460" -vcodec libx264 -vb 2000k \
-preset ultrafast -f mp4 output.mp4

In short, this sets up capture from v4l2-device /dev/video0 with a framesize of 640×480 in 30 fps (pretty common for older webcams). The -vf is where the filter gets applied. fontfile gives the path to a TTF font, text contains the text we want, in this case we want to expand a strftime() sequence (see man strftime for a full list of parameters). Note the escaping slash in front of the %. Then we set the font color to white, with a 80% opacity. There are many other options, such as fontsize, but I haven’t tried them.

Hope this is useful for someone out there.

Addendum, February 21, 2016

Turns out, this blog post has been dug up by people from time to time, judging from the number of pingbacks it has accumulated over the years. So in case you’re here now: ffmpeg made some changes to how they do text expansion (go figure), and the link to the documentation changed too. Here’s a revised example, using a more modern camera with mjpeg for good measure:

ffmpeg -f video4linux2 -input_format mjpeg -s 1280x720 -i /dev/video0 \
-vf "drawtext=fontfile=/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf: \
text='%{localtime\:%T}': fontcolor=white@0.8: x=7: y=700" -vcodec libx264 \
-preset veryfast -f mp4 -pix_fmt yuv420p -y output.mp4

How to get Spotify URLs working again in Ubuntu 11.04

I’m using the native Spotify client for Linux (available here), which is only available to paying subscribers at the moment, apparently due to some problems in getting commercials to work reliably or something like that, but that’s not the topic of this post.

Ever since I upgraded to Natty I haven’t been able to get Spotify-URIs to work. That is, links that look like this:
spotify:user:einarjh:playlist:7iWZ9zuOOILXU5hbzruuxE. Today I found the corresponding bug: Bug #788673 in xdg-utils.

This is how you fix it:

Create the file /usr/share/applications/spotify-url.desktop and add the following content:

[Desktop Entry]
Name=Spotify
GenericName=Spotify
Comment=Listen to music using Spotify
Icon=spotify-linux-512x512
TryExec=spotify
Exec=spotify -uri %u
Terminal=false
Type=Application
Categories=Qt;AudioVideo
MimeType=x-scheme-handler/spotify
NoDisplay=true

That’s it! Enjoy your working Spotify URIs!

En webfont til besvær

Jeg har, etter å ha prokrastinert det i et par år, endelig somlet meg til å lage et nytt design til hjemmesiden min og bloggen. Du sitter muligens og ser på resultatet av dette akkurat nå (med mindre du bruker RSS, Planet eller jeg har byttet design igjen).

Det jeg ønsket å oppnå var å videreføre design-elementer fra det forrige designet mitt, som jeg aldri ble helt fornøyd med, samtidig som jeg holdt det hele så enkelt som mulig. Jeg tror jeg har lykkes med det i det store og det hele, men da jeg bestemte meg for å ta i bruk @font-face for å lage headeren min ble ting fort ganske hårete.

Jeg bruker til vanlig Google Chrome, og mesteparten av designarbeidet mitt gjorde jeg med referanse til denne nettleseren, i den tro at alt var flott og fint i de andre nettleserne som følger standarder. Jeg visste jeg ville måtte gjøre noen ekstra-grep for å få IE8 til å oppføre seg, men det er som forventet, og det skal jeg ikke gå inn på her (utover det at det finnes et fint verktøy for å konvertere TTF- og OTF-fonter til de andre rare formatene ulike nettlesere krever hos Font Squirrel, og en grei teknikk for å få flest mulig nettlesere til å fungere er beskrevet her).

Jeg fant nemlig uventet motstand hos ingen ringere enn Firefox. Det har seg sånn at jeg har to domener: haraldseid.net, som jeg bruker for typiske «hjemmeside-ting», altså meget statisk innhold, og slaskete.net, som jeg tidligere delte med Amund og Sverre, til blogg. Begge domenene kjører fra samme server. Jeg utviklet først designet mitt på hjemmesiden, siden det er en meget triviell oppgave med flate HTML-filer osv. Alt var fint og flott. Så skulle jeg arve dette designet til WordPress-bloggen her på slaskete.net, og da ville plutselig ikke den fine fonten i headeren vises i Firefox lenger!

Jeg lette etter feil og bugs og overstyringer fra andre CSS-er, jeg brukte Firebug og jeg prøvde å validere CSS-en (som selvsagt ikke validerer, på grunn av alle de eksperimentelle funksjonene jeg bruker) i ulike validatorer. Til slutt måtte jeg ty til Google, og fant etter hvert ut at:

Firefox nekter vanligvis å vise en webfont (definert med @font-face) fra eksterne URL-er, med mindre denne eksterne webserveren er konfigurert til å tillate det! Grunnen til dette er at man ønsker å begrense «piratkopiering» og uautorisert bruk av webfonter. Nå er det så vidt jeg vet bare Firefox som gjør dette, jeg opplevde i hvert fall ikke problemet med andre nettlesere.

Så hvordan får man Firefox til å akseptere at fonten man linker til er gangbar? Jo, med HTTP-headerne! Her er hvordan du gjør det med Apache:

Først og fremst må du sørge for at mod_headers.so er aktivert, hvordan man gjør dette varierer fra server til server, men under Debian gjorde jeg rett og slett sånn:

a2enmod headers
/etc/init.d/apache2 restart

Med dette på plass så oppretter man en .htaccess-fil i den mappen som fonten ligger, med følgende innhold:

# example Apache .htaccess file to add access control header

<FilesMatch "\.(ttf|otf)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>

Mer info og kilde for løsningen er hos Mozilla Hacks.

OneCall mobilt bredbånd i Ubuntu GNU/Linux

Før jul gikk jeg litt amok og bestilte meg mobilt bredbånd fra OneCall, mest fordi jeg ville ha det i julen mens jeg var hjemme. Nå fikk jeg selvsagt ikke modemet før jeg var tilbake på Gjøvik, men det er en annen sak. Som seg hør og bør begynte jeg å undersøke hvordan jeg skulle få det nye leketøyet til å fungere i Linux. Det viste seg å være relativt enkelt (men man må leke litt i terminalen for å få det til å gå). Så her følger fremgangsmåten for å få OneCalls «Personlig Bredbånd» til å fungere i Ubuntu 8.10, Intrepid Ibex. Samme fremgangsmåte bør fungere for alle som har NetworkManager versjon 0.7.0 eller nyere.

OneCall har valgt et modem som heter Option iCon 401, og som så mange andre modem av denne typen så opererer det i to modi: Når du først plugger den inn i USB-porten så presenterer den seg som en falsk CD-ROM-stasjon med noe magisk auto-installasjonsprogram beregnet på Windows og OS X. Dette er imidlertid overhodet ikke hjelpsomt for en Linux-bruker, all den tid det ikke følger med programvare for å dytte modemet over i riktig modus på Linux-plattformen. (Her er det verdt å nevne at folkene i Ice er mye hyggeligere, selv om deres løsning heller ikke er feilfri, kanskje jeg skriver om det en annen gang).

Det finnes et par forskjellige programmer som tar seg av jobben med å bytte modus på modemet slik at systemet gjenkjenner ting på riktig måte. Jeg valgte en løsning som tar seg av jobben helt automagisk:

Last først ned filen udev.tar.gz fra denne forumposten: http://www.pharscape.org/forum/index.php?topic=545.0 [direktelink]. Naviger så dit du lastet ned filen i en terminal, jeg lagret den i ~/tmp/:

cd ~/tmp/
tar zxvf udev.tar.gz
cd udev
sudo make install
sudo /etc/init.d/udev restart

Når du har utført dette skal udev ha blitt startet på nytt, og NetworkManager skal ha oppdaget modemet. Dette kan du bekrefte ved å trykke på NetworkManager-ikonet og se etter teksten «Mobile Broadband»:

Hvis man så trykker der det står «Configure …» blir man så kastet inn i en konfigurasjonsveiviser, eller «wizard», som det heter så fint:

Trykk Forward, og sørg for at Country er satt til Norway. Her får man dessverre ikke opp et valg for OneCall, men OneCall benytter seg i skrivende stund av Telenor sitt nettverk, så deres oppsett fungerer fint. så velg Telenor og gå videre:

Det neste og siste valget man må ta er hva man skal kalle tilkoblingen, her skrev jeg OneCall, som seg hør og bør.

Neste gang du trykker på ikonet for NetworkManager bør du ha fått opp et nytt valg for OneCall under «Mobile Broadband». Når du trykker på denne blir du spurt om PIN-koden, dette skal ha fulgt med SIM-kortet ditt. Skriv inn PIN-koden og trykk OK, og nå skulle mobilt bredbånd være oppe og gå. Slettes ikke verst!

ICE bredbånd i Linux (Ubuntu Feisty Fawn)

Jeg kom nettopp hjem igjen til Åsta, for første gang på 50 dager (sist gang jeg var hjemme var i påsken). Da jeg kom hjem var selvfølgelig det første jeg gjorde å stjele CDMA-modemet til pappa, som gir tilgang til ICE-bredbåndet hans. Da kom jeg imidlertid på at jeg har installert Linux på nytt siden sist, så innstillingene for å koble på bredbåndet har blitt borte. Etter en kjapp tur innom Windows fant jeg heldigvis informasjonen jeg trengte, og for at jeg selv skal slippe dette i fremtiden, og for at det kanskje skal bli lettere for noen andre der ute, så lager jeg herved en kort og enkel HOWTO for hvordan man enklest mulig kobler seg opp mot ICE mobilt bredbånd fra Linux og GNOME. Dette fungerer i hvert fall med den nyeste utgaven av Ubuntu Linux:

Først og fremst må du sørge for at modemet er tilkoblet PC-en og er påslått.

Gå så på System -> Administration -> Network. Velg «Modem connection» og trykk på Properties. Velg så «Enable this connection». Nå kan man fylle inn informasjonen, og det er veldig enkelt.

ICE bredbånd

  • Phone number: #777
  • Username: cdma
  • Password: cdma

Dette er likt for alle, ICE bruker andre metoder enn brukernavn og passord for å finne ut hvem det er som logger seg på nettverket.

Velg så den neste fanen, «Modem». Her skal Modem port settes til /dev/ttyUSB0.
ICE bredbånd

På den siste fanen huker man av for alle tre valgene.
ICE bredbånd

Nå er det bare å aktivere modemtilkoblingen, så vil den bruke et øyeblikk på å koble seg opp, så skal man ha tilgang til Internett. Enkelt og greit!
ICE bredbånd