Sida 1 av 3

Skript för att spela upp svtplay-strömmar i mplayer

Postat: 10 jul 2010, 23:13
av mattsl
Jag har hackat ihop ett litet bash-skript som förenklar att spela upp rtmpe-strömmar från svtplay via rtmpdump och mplayer. Kanske kan det vara någon till nytta:

http://acephale.eu.org/kod/svtplay-rtmpdump.txt

OBS! rtmpdump finns inte i Lucids repositorier, så det är nödvändigt att lägga till en ny programkälla. Jag använde denna PPA: "ppa:hunter-kaller/ppa".

Url till strömmarna får man genom att gå in under inställningarna bredvid svt:s flashklipp.

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 11 jul 2010, 10:36
av webaake
Ser ut att vara kanon! Jag brukar hämta filen först med rtmpdump och sedan spela upp den. Passar min slöa P4:a bättre. Typ;

rtmpdump -r $url -o $filename.mp4

$url är samma som ovan, alltså från länken "inställningar" lite till höger på tv-sidan.

Enda nackdelen är att t ex vlc och smplayer har lite svårt att spola i dessa filer.

Kan klistra in hela scriptet om nån vill ha det.

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 11 jul 2010, 10:48
av mattsl
Gör det. Kul att kika på!

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 11 jul 2010, 22:49
av webaake

Kod: Markera allt

#!/bin/bash

echo "Download från svtplay. Du måste ha rtmpe-adressen samt ange filnamn (.mp4 eller .flv)"
echo "Ange rtmpe-adressen:"
read url
echo "$url"
echo "Ange filnamnet:"
read filename
echo "$filename"
echo "Kör download"
rtmpdump -r $url -o $filename.mp4
echo "Done! Filen här:"
ls $filename.mp4
exit 0

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 13 jul 2010, 00:05
av m!rage
Det går inte så bra för mig. För det första använder SVT Play protokollet rtmp: och inte rtmpe:, för det andra krashar det direkt (hinner bara se ett mplayer-fönster öppnas och stängas). Från terminalen:

Kod: Markera allt

$ ./svtplay-rtmpdump rtmpe://fl11.c91005.cdn.qbrick.com/91005/_definst_/kluster/20100710/PG-1119590-006A-SVENSKMENTALITE-02-mp4-d-v1.mp4
Hittade rtmpdump ...
RTMPDump v2.2d
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
Connecting ...
MPlayer SVN-r31042-Ubuntu-RVM (C) 2000-2010 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing -.
Reading from stdin...
Cache fill:  0.00% (0 bytes)   WARNING: HandShake: Type mismatch: client sent 6, server answered 8
Cache fill:  0.00% (0 bytes)   INFO: Connected...
Cache fill:  0.00% (0 bytes)   Starting download at: -0.001 kB
Cache fill:  0.00% (0 bytes)   INFO: Metadata:
Cache fill:  0.00% (0 bytes)   INFO:   duration              2602.56
Cache fill:  0.00% (0 bytes)   INFO:   moovPosition          28.00
Cache fill:  0.00% (0 bytes)   INFO:   width                 1024.00
Cache fill:  0.00% (0 bytes)   INFO:   height                576.00
INFO:   videocodecid          avc1
Cache fill:  0.00% (0 bytes)   INFO:   audiocodecid          mp4a
Cache fill:  0.00% (0 bytes)   INFO:   avcprofile            77.00
Cache fill:  0.00% (0 bytes)   INFO:   avclevel              32.00
INFO:   aacaot                2.00
Cache fill:  0.00% (0 bytes)   INFO:   videoframerate        25.00
Cache fill:  0.00% (0 bytes)   INFO:   audiosamplerate       48000.00
Cache fill:  0.00% (0 bytes)   INFO:   audiochannels         2.00
INFO: trackinfo:
Cache fill:  0.00% (0 bytes)   INFO:   length                65063000.00
Cache fill:  0.00% (0 bytes)   INFO:   timescale             25000.00
Cache fill:  0.00% (0 bytes)   INFO:   language              eng
INFO: sampledescription:
Cache fill:  0.00% (0 bytes)   INFO:   sampletype            avc1
Cache fill:  0.00% (0 bytes)   INFO:   length                124922880.00
Cache fill:  0.00% (0 bytes)   INFO:   timescale             48000.00
INFO:   language              eng
Cache fill:  0.00% (0 bytes)   INFO: sampledescription:
INFO:   sampletype            mp4a
Cache fill:  0.78% (65536 bytes)   
Caught signal: 13, cleaning up, just a second...
ERROR: WriteN, RTMP send error 32 (42 bytes)
ERROR: RTMP_ReadPacket, failed to read RTMP packet body. len: 65774
72.249 kB / 0.24 sec (0.0%)
Download may be incomplete (downloaded about 0.00%), try resuming
Cache fill:  0.88% (73728 bytes)   
libavformat file format detected.
[flv @ 0xaf487e0]Estimating duration from bitrate, this may be inaccurate
[lavf] Video stream found, -vid 0
[lavf] Audio stream found, -aid 1
VIDEO:  [H264]  1024x576  0bpp  25.000 fps    0.0 kbps ( 0.0 kbyte/s)
Clip info:
 duration: 2603
 moovPosition: 28
 width: 1024
 height: 576
 videocodecid: avc1
 audiocodecid: mp4a
 avcprofile: 77
 avclevel: 32
 aacaot: 2
 videoframerate: 25
 audiosamplerate: 48000
 audiochannels: 2
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
==========================================================================
Opening audio decoder: [faad] AAC (MPEG2/4 Advanced Audio Coding)
FAAD: compressed input bitrate missing, assuming 128kbit/s!
AUDIO: 48000 Hz, 2 ch, s16le, 128.0 kbit/8.33% (ratio: 16000->192000)
Selected audio codec: [faad] afm: faad (FAAD AAC (MPEG-2/MPEG-4 Audio))
==========================================================================
AO: [pulse] 48000Hz 2ch s16le (2 bytes per sample)
Starting playback...
Movie-Aspect is 1.78:1 - prescaling to correct movie aspect.
VO: [xv] 1024x576 => 1024x576 Planar YV12 
A:   0.2 V:   0.2 A-V: -0.012 ct: -0.008   0/  0 ??% ??% ??,?% 0 0 0% 

Exiting... (End of file)
EDIT: fel av mig, de använder både rtmp och rtmpe. Testade även rtmpe://fl11.c90909.cdn.qbrick.com/90909/_definst_/kluster/20100709/PG-1134212-010A-MERLIN2-01-mp4-d-v1.mp4 men fick samma resultat :( några idéer?

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 13 jul 2010, 00:46
av mattsl
rtmp/rtmpe bör inte spela någon roll -- låt bara protokollet stå kvar orört, så som det är angivet i länken från svt ("rtmp://" i det här fallet).

Fredrik Lindström's program funkar finfint för mig (förutom vissa problem med synkning av ljudspåret). Det ser ut som att du har missat att sätta citat-tecken kring url -- det leder till problem när bash ska tolka kommandoraden.

Gör alltså så här...

Kod: Markera allt

./svtplay-rtmpdump "rtmp://fl11.c91005.cdn.qbrick.com/91005/_definst_/kluster/20100710/PG-1119590-006A-SVENSKMENTALITE-02-mp4-d-v1.mp4"
...så ska det förhoppningvis funka bättre!

PS. Om du får problem med synkningen som jag så kan du fixa det manuellt genom att justera med +/- på tangentbordet (-100 ms funkade för mig.).

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 13 jul 2010, 08:04
av m!rage
Nä... Jag har nog fel version av något program antar jag.

Kod: Markera allt

$ mplayer
MPlayer SVN-r31042-Ubuntu-RVM (C) 2000-2010 MPlayer Team
$ rtmpdump 
RTMPDump v2.2d
vilka har du?

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 13 jul 2010, 08:54
av mattsl
Jag har samma version av rtmpdump (2.2d) -- men mplayer skiljer sig från din:

Kod: Markera allt

$ mplayer
MPlayer SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team
Lite märkligt, för så vitt jag vet har jag bara standardversionen som finns i Lucids repositorier. Kanske du har en annan utgåva av Ubuntu?

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 13 jul 2010, 09:09
av dmz
Hade lite tråkigt på fikarasten... att manuellt behöva leta upp rätt url verkar jobbigt.

Kod: Markera allt

#!/usr/bin/perl
# svtplay.pl
# dependencies: rtmpdump,mplayer

use strict;
use LWP::Simple;

my %shows = (
  vtd => {
    name  => 'Vem tror du att du är?',
    url   => 'http://svtplay.se/t/106474/vem_tror_du_att_du_ar_',
  },
  ibis    => {
    name  => 'Ingen bor i skogen',
    url   => 'http://svtplay.se/t/132050/ingen_bor_i_skogen',
  },
  hsr     => {
    name  => 'Hemliga svenska rum',
    url   => 'http://svtplay.se/t/102776/hemliga_svenska_rum',
  },
  merlin  => {
    name  => 'Merlin',
    url   => 'http://svtplay.se/t/104065/merlin',
  },
  vml     => {
    name  => 'Världens modernaste land',
    url   => 'http://svtplay.se/t/133773/varldens_modernaste_land',
  },
  hh      => {
    name  => 'Hemma hos',
    url   => 'http://svtplay.se/t/134698/premiar__hemma_hos_caroline_af_ugglas',
  },
  et      => {
    name  => 'Engelska trädgårdar',
    url   => 'http://svtplay.se/t/104829/engelska_tradgardar',
  },
  ub      => {
    name  => 'Undercover boss',
    url   => 'http://svtplay.se/t/134508/seriestart__undercover_boss',
  },
  fotc    => {
    name  => 'Flight of the Conchords',
    url   => 'http://svtplay.se/t/103576/flight_of_the_conchords',
  },
  philo   => {
    name  => 'Philofix',
    url   => 'http://svtplay.se/t/102709/philofix',
  },
  aps     => {
    name  => 'Allsång på skansen',
    url   => 'http://svtplay.se/t/102897/allsang_pa_skansen',
  },
  fangad  => {
    name  => 'Fångad',
    url   => 'http://svtplay.se/t/134122/fangad',
  },
  it      => {
    name  => 'In treatment',
    url   => 'http://svtplay.se/t/110255/in_treatment',
  },
  rapport => {
    name  => 'Rapport',
    url   => 'http://svtplay.se/t/103261/rapport',
  },
);

my $show = shift;

if(!$show or !defined($shows{$show})) {
  usage()
}
my $mp   = 'mplayer -cache 400';
my $url  = $shows{$show}{url};

my @content = split(/\n/,get("$url")) or die();


my $rtmp = undef;
for(@content) {
  if($_ =~ s;.+(rtmp.+\.mp4).+;;) {
    $rtmp = "'$1'";
    last;
  }
}

sub usage {
  print << "USAGE";
  USAGE: $0 show

  SHOWS:
USAGE
  for my $shn(keys(%shows)) {
    printf("\033[1m\033[33m%10s\033[0m : %s\n", $shn, $shows{$shn}{name});
  }
  exit(0);
}

system("rtmpdump -r $rtmp|$mp -");

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 13 jul 2010, 09:33
av mattsl
snyggt! skriptet genererar dock länkar till den lågupplösta versionerna, men det borde ju gå att fixa...

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 13 jul 2010, 10:50
av dmz
Aha. Var det därför det såg ut som skit... Hur/var hittar man högsta kvalitet?

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 13 jul 2010, 11:00
av mattsl
Det som skiljer strömmarnas url åt är bokstaven mellan "mp4-" och "-v1.mp4". Kan vara antingen d,c,b eller a (tror jag); "d"=högst, "a"=lägst. Jfr nedan:

Kod: Markera allt

rtmp://fl11.c91005.cdn.qbrick.com/91005/_definst_/kluster/20100710/PG-1131271-001A-BERGMANSHUSHALL-01-mp4-d-v1.mp4
rtmp://fl11.c91005.cdn.qbrick.com/91005/_definst_/kluster/20100710/PG-1131271-001A-BERGMANSHUSHALL-01-mp4-c-v1.mp4
rtmp://fl11.c91005.cdn.qbrick.com/91005/_definst_/kluster/20100710/PG-1131271-001A-BERGMANSHUSHALL-01-mp4-b-v1.mp4
(Utklippt härifrån: http://svtplay.se/v/2053192/bergmans_hushallerska)

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 13 jul 2010, 11:21
av dmz
Det blev lite bättre, tack. Jag tror att allting sänds i minst 'c-klass'; fungerar detta bättre?

Kod: Markera allt

#!/usr/bin/perl
# svtplay.pl
# dependencies: rtmpdump,mplayer

use strict;
use LWP::Simple;

my %shows = (
  vtd => {
    name  => 'Vem tror du att du är?',
    url   => 'http://svtplay.se/t/106474/vem_tror_du_att_du_ar_',
  },
  ibis    => {
    name  => 'Ingen bor i skogen',
    url   => 'http://svtplay.se/t/132050/ingen_bor_i_skogen',
  },
  hsr     => {
    name  => 'Hemliga svenska rum',
    url   => 'http://svtplay.se/t/102776/hemliga_svenska_rum',
  },
  merlin  => {
    name  => 'Merlin',
    url   => 'http://svtplay.se/t/104065/merlin',
  },
  vml     => {
    name  => 'Världens modernaste land',
    url   => 'http://svtplay.se/t/133773/varldens_modernaste_land',
  },
  hh      => {
    name  => 'Hemma hos',
    url   => 'http://svtplay.se/t/134698/premiar__hemma_hos_caroline_af_ugglas',
  },
  et      => {
    name  => 'Engelska trädgårdar',
    url   => 'http://svtplay.se/t/104829/engelska_tradgardar',
  },
  ub      => {
    name  => 'Undercover boss',
    url   => 'http://svtplay.se/t/134508/seriestart__undercover_boss',
  },
  fotc    => {
    name  => 'Flight of the Conchords',
    url   => 'http://svtplay.se/t/103576/flight_of_the_conchords',
  },
  philo   => {
    name  => 'Philofix',
    url   => 'http://svtplay.se/t/102709/philofix',
  },
  aps     => {
    name  => 'Allsång på skansen',
    url   => 'http://svtplay.se/t/102897/allsang_pa_skansen',
  },
  fangad  => {
    name  => 'Fångad',
    url   => 'http://svtplay.se/t/134122/fangad',
  },
  it      => {
    name  => 'In treatment',
    url   => 'http://svtplay.se/t/110255/in_treatment',
  },
  rapport => {
    name  => 'Rapport',
    url   => 'http://svtplay.se/t/103261/rapport',
  },
);

my $show = shift;

if(!$show or !defined($shows{$show})) {
  usage()
}
my $mp   = 'mplayer -cache 400';
my $url  = $shows{$show}{url};

my @content = split(/\n/,get("$url")) or die();


my $rtmp = undef;
for(@content) {
  if($_ =~ s;.+(rtmp.+mp4-d-v1\.mp4).+;;) {
    $rtmp = "'$1'";
    last;
  }
  elsif($_ =~ s;.+(rtmp.+mp4-c-v1\.mp4).+;;) {
    $rtmp = "'$1'";
    last;
  }
}

sub usage {
  print << "USAGE";
  USAGE: $0 show

  \033[1mSHOWS\033[0m:
USAGE
  for my $shn(keys(%shows)) {
    printf("\033[1m\033[33m%7s\033[0m %s\n", $shn, $shows{$shn}{name});
  }
  exit(0);
}

system("rtmpdump -r $rtmp|$mp -");
Nästa steg är väl kanske att få någon uppdaterad lista över vilka program SVT sänder som är återkommande; tips?

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 13 jul 2010, 16:07
av m!rage
mattsl skrev:Jag har samma version av rtmpdump (2.2d) -- men mplayer skiljer sig från din:

Kod: Markera allt

$ mplayer
MPlayer SVN-r1.0~rc3+svn20090426-4.4.3 (C) 2000-2009 MPlayer Team
Lite märkligt, för så vitt jag vet har jag bara standardversionen som finns i Lucids repositorier. Kanske du har en annan utgåva av Ubuntu?
Jag har en nyare version av mplayer från något ppa, tror att det är

Kod: Markera allt

ppa:rvm/mplayer
Får se om jag pallar nergradera till den i Ubuntus förråd och testa någon dag

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 13 jul 2010, 22:46
av mattsl
dmz skrev:Det blev lite bättre, tack. Jag tror att allting sänds i minst 'c-klass'; fungerar detta bättre?
Funkar strålande.
dmz skrev:Nästa steg är väl kanske att få någon uppdaterad lista över vilka program SVT sänder som är återkommande; tips?
Det finns rss-flöden, kanske skulle det gå att använda dem på nåt sätt? http://svt.se/hjalp/play/rss-podd

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 14 jul 2010, 06:32
av dmz
Jag kanske är usel på att söka, men de enda rss-flöden jag kan hitta är http://svt.se/svt/jsp/Crosslink.jsp?d=104149&a=1395781 , och inte heller de länkar till programmet i fråga. :/

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 14 jul 2010, 09:35
av mattsl
Jag tänkte på det här:

Kod: Markera allt

http://feeds.svtplay.se/v1/video/list/96238?expression=full&mode=plain
...men där finns bara länk till programmets "sajt" och alltså bara den första delen av rtmp-url.

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 14 jul 2010, 11:38
av dmz
mattsl skrev:Jag tänkte på det här:

Kod: Markera allt

http://feeds.svtplay.se/v1/video/list/96238?expression=full&mode=plain
...men där finns bara länk till programmets "sajt" och alltså bara den första delen av rtmp-url.
Inga problem, det blir fint.
Nu har vi en uppdaterad och aktuell lista...
Bild

Kod: Markera allt

#!/usr/bin/perl
# svtplay.pl
# dependencies: rtmpdump,mplayer

use strict;
use LWP::Simple;
use XML::Simple;
use Data::Dumper;

my $baserss =
'http://feeds.svtplay.se/v1/video/list/96238?expression=full&mode=plain';


my $foo = XMLin(get($baserss));

my %shows = ();
my $i = 0;
for(keys(%{$foo})) {
  for($foo->{channel}{item}) {
    for(@{$_}) {
      #print Dumper $_;
      $shows{$i++} = {
        name  => $_->{title},
        uri   => $_->{link},
        pub   => $_->{pubDate},
      };
    }
  }
}


my $show = shift;

if(!$show || !defined($shows{$show})) {
  usage()
}
my $mp   = 'mplayer -cache 400';
my $url  = $shows{$show}->{uri};

my @content = split(/\n/,get("$url")) or die();


my $rtmp = undef;
for(@content) {
  if($_ =~ s;.+(rtmp.+mp4-d-v1\.mp4).+;;) {
    $rtmp = "'$1'";
    last;
  }
  elsif($_ =~ s;.+(rtmp.+mp4-c-v1\.mp4).+;;) {
    $rtmp = "'$1'";
    last;
  }
}
print ">>>> $rtmp <<<<\n\n";

sub usage {
  print << "USAGE";
  USAGE: $0 show

  \033[1mSHOWS\033[0m:
USAGE

  for my $i(sort{$a <=> $b}(keys(%shows))) {
    printf("[\033[1m%02d\033[0m] \033[30;1m%s\033[0m \033[33m%s\033[0m \n",$i,
      $shows{$i}{pub}, $shows{$i}{name});
  }
  exit(0);
}
system("rtmpdump -r $rtmp|$mp -");

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 14 jul 2010, 14:03
av mattsl
Snyggt! Enormt imponerande. Ett perl-beroende kom dock till: "XML::Simple". Enkelt löst med detta kommando:

Kod: Markera allt

sudo aptitude install libxml-simple-perl
Vid ett senare tillfälle ska jag posta instruktioner för hur man associerar rtmp-länkar så att strömmen öppnas direkt från webbläsaren via det ursprungliga bash-skriptet. För den som föredrar att läsaren före terminalen.

Re: Skript för att spela upp svtplay-strömmar i mplayer

Postat: 14 jul 2010, 17:14
av dmz
SVT kanske inte är så tokigt ändå - Pingu!