2007-12-22

Nörd-pölsa med öl

Igår fick jag för mig att titta på TV över nätet, eftersom jag såg att jag hade missat Musikbyråns topplista för 2007. SVT erbjuder sina program i två format: Windows Media och Real Media. Jag brukar använda MPlayer för att titta på video, för att det är vänligt mot mig som användare. Min webbläsare ville däremot att jag skulle använda gxine, så jag testade med det. Det gav mig ljud, men ingen bild, vilket ger en ganska fattig TV-upplevelse. MPlayer klarade av att spela upp Microsofts format, men inte Reals.

När man klickar på en video-länk på SVT så får man dock inte en URL direkt till en ström, utan en liten XML-fil (ja, inte en korrekt XML-fil, eftersom det trots allt är Microsoft vi snackar om, men något som i mångt och mycket liknar en XML-fil), med filändelsen asx, som bl.a. innehåller URL-en man är ute efter. En ASX-fil ser ut såhär:

<asx version="3.0">
<entry>
<ref href="mms://qstream-wm.qbrick.com/00928/sthlm/pi/071218musikbyran.wmv"></ref>
<title>Musikbyrån</title>
<author>svt.se</author>
<copyright>Sveriges Television AB 2007</copyright>
</entry>
</asx>


MPlayer klarar av någon anledning inte av dessa ASX-filer, så jag skrev ett litet script för att plocka ut URL-en och skicka den till MPlayer:


#!/bin/bash

file=`grep "ref href" $1 | cut -f 2 -d \"`

xscreensaver-command -exit;
/usr/bin/mplayer -ao alsa -vo xv -idx -fs -zoom -osdlevel 1 "$file";
xscreensaver -no-splash &


Parsningen sker på rad 3, där jag letar upp den rad i filen som innehåller strängen "ref href", och klipper ut fält 2 från den raden, om vi ser på den som ett gäng fält som är uppdelade med tecknet " som separator. Resultatet lagrar vi i variabeln file. Sen avvaktiverar vi skärmsläckaren, spelar upp filmen från variabeln file, och avslutar med att slå på skärmsläckaren igen. Ganska enkelt, om man har någon typ av Unix-skägg (eller åtminstone Unix-skäggstubb).

Det här scriptet kan nu, med hjälp av MPlayer, spela strömmar från ASX-filer. Sen var det bara att säga åt webbläsaren att hantera ASX-filer med det här scriptet, och vi är hemma. Vad jag ansåg om Musikbyråns topplista kanske jag återkommer med. Risken är dock att det inlägget skulle bli nästan lika musiknördigt som det här var datanördigt, så det kanske vore bättre om jag sket i det.

3 kommentarer:

ul7 sa...

Vad är oddsen, great minds think alike, osv. För inte alls länge sedan skrev jag det här:

my $t_url =
'http://sr.se/webbradio/include/CreatePlaylist.asp?' .
'SkipDetect=1&id=%s&type=broadcast&AvailableAudioFormats=3' .
'&AudioFormat=3&IsBlock=1';
my $re_id = qr/\Wid=(\d+)/is;
my $re_wma = qr/(mms:(.*?)\.wma)/is;

{
my $i = shift;
if ($i =~ $re_id) {
my $url = sprintf($t_url, $1);
my $html = LWP::Simple::get($url);
if (defined $html) {
if ($html) {
if ($html =~ $re_wma) {
while ($html =~ m/$re_wma/g) {
printf("%s\n", $1);
} } } } } }

Inte alls samma grad av felhantering och nivå av användarupplevelse som din, men ändå.

puterman sa...

Felhantering är för folk som blir oroliga när det kommer rök ur datorn.

ul7 sa...

Milda makaroner