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:
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å.
Felhantering är för folk som blir oroliga när det kommer rök ur datorn.
Milda makaroner
Skicka en kommentar