SVT Play krånglar

Kommer inte in i undermenyer (rekommenderat. etc.)
Har någon mer märkt att SVT Play blivit lite skumt senaste veckan? Jag kommer inte in i vissa undermenyer som t.ex "Rekommenderat" eller "Senaste program". Kan de ha nåt med att göra att SVT har gjort om så att streamingen anpassar kvaliten till uppkopplingen?

Ajdå. Har inte använt pluggen så mycket sedan jag flyttade till Malta på grund av vissa geo-restrictions som tyvärr alla bolag använder.

Skulle du kunna göra en liten undersökning och lista här alla underavdelningar som inte längre fungerar så ska jag se vad jag kan göra.




De undermenyer som inte fungerar för mig är:

Mest Sedda
Rekommenderat
Senaste Program
Senaste Klipp

Sen har jag märkt att jag inte kommer in på vissa program med. Tex. Gävledala.


Mina barn använder **SVT Play / Kategorier / Barn /** en hel del (eller man kanske kan säga att jag använder det för att få tid med annat...). Nu är det så att vissa program inte fungerar längre.

Detta dyker upp i Library/Logs/PMS\ Plugin\ Logs/com.plexapp.plugins.svtplay.log:


<br />
Request 3 ['categories||||Kategorier', 'category||aHR0cDovL3N2dHBsYXkuc2UvYy85NjI1MS9iYXJu||Barn', 'program||aHR0cDovL3N2dHBsYXkuc2UvdC8xMDk1OTAvcGlu<br />
Z3U=||Pingu']<br />
10:52:03.101497: com.plexapp.plugins.svtplay     :   (Framework) Request to http://svtplay.se/t/109590/pingu return 38645 bytes<br />
10:52:03.109296: com.plexapp.plugins.svtplay     :   url: http://svtplay.se/t/109590/pingu divId: sb<br />
10:52:03.109528: com.plexapp.plugins.svtplay     :   xpath expr: //div[@id='sb']<br />
10:52:03.110416: com.plexapp.plugins.svtplay     :   Clip : 29/6<br />
10:52:03.110607: com.plexapp.plugins.svtplay     :   URL: http://svtplay.se/v/2059349/pingu/29_6?cb,a1364151,1,f,-1/pb,a1364150,1,f,-1/pl,v,,2059349/<br />
sb,p109592,1,f,-1<br />
10:52:03.111008: com.plexapp.plugins.svtplay     :   Clip icon: >http://media.svt.se/download/mcc/flash/20100628/PG-05002404-019-001-PINGUSERIE/PG-05<br />
002404-019-001-PINGUSERIE_start_0.jpg<<br />
10:52:03.324088: com.plexapp.plugins.svtplay     :   (Framework) Saved 'http://svtplay.se/v/2059349/pingu/29_6?cb,a1364151,1,f,-1/pb,a1364150,1,f,-1/<br />
pl,v,,2059349/sb,p109592,1,f,-1' to the cache<br />
10:52:03.333162: com.plexapp.plugins.svtplay     :   Episode length: 0 5 5<br />
10:52:03.406170: com.plexapp.plugins.svtplay     :   (Framework) An exception happened:<br />
Traceback (most recent call last):<br />
  File "/Users/tv/Library/Application Support/Plex Media Server/Plug-ins/Framework.bundle/Contents/Resources/Versions/0/Python/PMS/Plugin.py", line 4<br />
68, in __run<br />
    result = handler(pathNouns, count)<br />
  File "/Users/tv/Library/Application Support/Plex Media Server/Plug-ins/SVT Play.bundle/Contents/Code/__init__.py", line 102, in HandleRequest<br />
    menuItems.extend(BuildGenericMenu(url,title,"sb"))<br />
  File "/Users/tv/Library/Application Support/Plex Media Server/Plug-ins/SVT Play.bundle/Contents/Code/__init__.py", line 176, in BuildGenericMenu<br />
    (clipSummary, clipLength, contentUrl) = GetEpisodeInfo(clipUrl)<br />
  File "/Users/tv/Library/Application Support/Plex Media Server/Plug-ins/SVT Play.bundle/Contents/Code/__init__.py", line 268, in GetEpisodeInfo<br />
    contentUrl = GetContentUrl(episodeElements)<br />
  File "/Users/tv/Library/Application Support/Plex Media Server/Plug-ins/SVT Play.bundle/Contents/Code/__init__.py", line 274, in GetContentUrl<br />
    return re.search(r'pathflv=(.*?)[&$]',flashvars).group(1)<br />
AttributeError: 'NoneType' object has no attribute 'group'<br />
<br />




Det man kan se är att den RegExp som skall lista ut URL för själva filmen inte fungerar (returnerar None), och den verkar söka efter variabeln

pathflv

i


flashvars

.



Det här är HTML-källan till en sida som fungerar:



<br />
<param name="flashvars" value="pathflv=rtmp://fl11.c91005.cdn.qbrick.com/91005/_definst_/kluster/20100608/PG-1130484-003A-AMANDAS2VERDNE-01&amp;background=http://media.svt.se/download/mcc/flash/20100608/PG-1130484-003A-AMANDAS2VERDNE/PG-1130484-003A-AMANDAS2VERDNE-01_start_0.jpg&amp;urlinmail=http://svtplay.se/v/2033476/amandas_tva_varldar/del_3_av_3&amp;liveStart=&amp;length=1233&amp;noemail=true&amp;noembed=true&amp;autostart=true&amp;buffertime=2.0&amp;a=2033476&amp;expression=full&amp;startpos=0&amp;expired=false&amp;statisticsUrl=http://ld.svt.se/svt/svt/s?svt-play.Barn.Hela-program.Del-3-av-3.2033476&amp;client=svt-play&amp;folderStructure=Amandas+tv%E5+v%E4rldar.Hela+program&amp;category=Barn&amp;title=Del+3+av+3&amp;broadcastDate=20100609"><br />




Det här är HTML-källan till en sida som INTE fungerar:


<br />
<param name="flashvars" value="dynamicStreams=url:rtmpe://fl11.c90909.cdn.qbrick.com/90909/_definst_/kluster/20100628/PG-05002404-019-001-PINGUSERIE-mp4-c-v1.mp4,bitrate:650|url:rtmpe://fl11.c90909.cdn.qbrick.com/90909/_definst_/kluster/20100628/PG-05002404-019-001-PINGUSERIE-mp4-b-v1.mp4,bitrate:256&amp;background=http://media.svt.se/download/mcc/flash/20100628/PG-05002404-019-001-PINGUSERIE/PG-05002404-019-001-PINGUSERIE_start_0.jpg&amp;urlinmail=http://svtplay.se/v/2059349/pingu/29_6&amp;liveStart=&amp;length=305&amp;noemail=true&amp;noembed=true&amp;autostart=true&amp;buffertime=2.0&amp;a=2059349&amp;expression=full&amp;startpos=0&amp;expired=false&amp;statisticsUrl=http://ld.svt.se/svt/svt/s?svt-play.Barn.Hela-program.29-6.2059349&amp;client=svt-play&amp;folderStructure=Pingu.Hela+program&amp;category=Barn&amp;title=29%2F6&amp;broadcastDate=20100629"><br />




Det man kan se är att det som eftersöks,

pathflv

, inte längre finns i HTML-källan. URL finns istället i


dynamicStreams

.



Hoppas detta hjälper. Jag hjälper gärna till att patcha det hela. Finns källkod någonstans på nätet? Jag har googlat en hel del men inte funnit det. Lägg upp det på github exvis, så kan jag skicka en patch när jag listat ut något som fungerar…



mvh

Magnus



Samma här :-)



Jag kollade vidare lite, och plug-ins hittar du installerade under:


<br />
~/Library/Application Support/Plex Media Server/Plug-ins/<br />




Med din debuggings hjälp gjorde jag en quick-n-dirty patch för att testa:


<br />
$ diff -u SVT\ Play.bundle/Contents/Code/__init__.py.orig SVT\ Play.bundle/Contents/Code/__init__.py <br />
--- SVT Play.bundle/Contents/Code/__init__.py.orig      2010-07-06 02:10:04.000000000 +0200<br />
+++ SVT Play.bundle/Contents/Code/__init__.py   2010-07-06 02:45:09.000000000 +0200<br />
@@ -271,7 +271,7 @@<br />
     <br />
 def GetContentUrl(pageElement):<br />
     flashvars = pageElement.xpath("//object[@id='playerSwf']/param[@name='flashvars']")[0].get("value")<br />
-    return re.search(r'pathflv=(.*?)[&$]',flashvars).group(1)<br />
+    return re.search(r'[flvpath|dynamicStreams]=(.*?)[&$]',flashvars).group(1) <br />
     <br />
 <br />
 # Replaces all running whitespace characters with a single space<br />




Och den gör att man nu kan gå in på programmen och välja avsnitt (det som slutat fungera).

Dock fungerar det inte att streama dem (får bara "Opening Stream"), så mer debugging måste göras.

/P


Så långt kom jag också (vilket jag borde ha rapporterat tillbaka hit...) men sen tog det stopp. Det fina vädret har gjort att familjen inte tillåter hacking just nu!

Jag har verifierat att man kan läsa rtmpe-strömmen med hjälp av

rtmpdump -r rtmpe://fl11.c90909.cdn.qbrick.com/90909/_definst_/kluster/20100703/PG-05002404-023-002-PINGUSERIE-mp4-c-v1.mp4 -o pingu.flv

. Filen som ramlar ut går att öppna i VLC, till exempel.



Det ser dock ut som om att man måste figga en “Site Config”: http://dev.plexapp.com/docs/Configs.html




En annan variant är förstås att Plex bygger in stöd för RTMPDUMP-sviten i Plex Media Server.

Det känns väldigt yxigt med en Site Config-lösning, då man måste parsa HTML-sidan för att hitta vilka JS som gör Play/Pause osv.

Om intresse finns kanske vi ska lägga upp SVT Play plugin på exvis GitHub så vi kan samarbeta med att ta fram en lösning som fungerar?


Preliminärt tror jag inte det behövs faktiskt. Med den enkla ändringen hoppar vissa program igång igen, upptäckte jag senare.
Tex. vissa episoder av "Fåret Shaun" (som min dotter älskar, och en av anledningarna till att jag lägger ner tid på detta :-))

Ex på fungerande ström (i Plex):

<br />
12:17:46.576792: com.plexapp.plugins.svtplay     :   Clip : Sömnlösa får<br />
12:17:46.576884: com.plexapp.plugins.svtplay     :   URL: http://svtplay.se/v/1834743/faret_shaun/somnlosa_far?cb,a1364151,1,f,-1/pb,a1364150,1,f,-1/pl,v,,1834743/sb,p108524,1,f,-1<br />
12:17:46.577112: com.plexapp.plugins.svtplay     :   Clip icon: >http://media.svt.se/download/mcc/flash/20100503/GEOSEMOBIL_PG-1128051-010A-SHA/GEOSEMOBIL_PG-1128051-010A-SHAUNTHESHEEP2_start_0.jpg<<br />
12:17:46.577225: com.plexapp.plugins.svtplay     :   (Framework) Loaded 'http://svtplay.se/v/1834743/faret_shaun/somnlosa_far?cb,a1364151,1,f,-1/pb,a1364150,1,f,-1/pl,v,,1834743/sb,p108524,1,f,-1' from the cache<br />
12:17:46.582554: com.plexapp.plugins.svtplay     :   Episode length: 0 7 0<br />
12:17:46.582790: com.plexapp.plugins.svtplay     :   Content url:rtmpe://fl11.c90909.cdn.qbrick.com/90909/_definst_/kluster/20100503/GEOSEMOBIL_PG-1128051-010A-SHAUNTHESHEEP2<br />
<br />




Ex på ej fungerande ström (i Plex):

<br />
12:17:46.583580: com.plexapp.plugins.svtplay     :   Clip : Bisvärmen<br />
12:17:46.583663: com.plexapp.plugins.svtplay     :   URL: http://svtplay.se/v/1624432/faret_shaun/bisvarmen?cb,a1364151,1,f,-1/pb,a1364150,1,f,-1/pl,v,,1834743/sb,p108524,1,f,-1<br />
12:17:46.583865: com.plexapp.plugins.svtplay     :   Clip icon: >http://media.svt.se/download/mcc/flash/20100703/PG-05001545-008-001-SHAUNTHESH/PG-05001545-008-001-SHAUNTHESH_start_0.jpg<<br />
12:17:46.583972: com.plexapp.plugins.svtplay     :   (Framework) Loaded 'http://svtplay.se/v/1624432/faret_shaun/bisvarmen?cb,a1364151,1,f,-1/pb,a1364150,1,f,-1/pl,v,,1834743/sb,p108524,1,f,-1' from the cache<br />
12:17:46.588972: com.plexapp.plugins.svtplay     :   Episode length: 0 7 3<br />
12:17:46.589189: com.plexapp.plugins.svtplay     :   Content url:url:rtmp://fl11.c90807.cdn.qbrick.com/90807/_definst_/kluster/20100703/PG-05001545-008-001-SHAUNTHESH-mp4-d-v1.mp4,bitrate:1400|url:rtmp://fl11.c90807.cdn.qbrick.com/90807/_definst_/kluster/20100703/PG-05001545-008-001-SHAUNTHESH-mp4-c-v1.mp4,bitrate:850|url:rtmp://fl11.c90807.cdn.qbrick.com/90807/_definst_/kluster/20100703/PG-05001545-008-001-SHAUNTHESH-mp4-b-v1.mp4,bitrate:320<br />




(Med min ytterst grunda kodläsning) tror jag man bara måste fixa till regex-en för hur "Content url:" (GetContentUrl) tas fram, så man även strippar bort den extra ^url: samt resterande |url: -ar som tillkommer i datat när det finns multipla strömmar. dvs. bara tar den första url-en som kommer, vilket ser ut att vara den med högst kvalitet ändå (av de få stickprov jag gjort).



Jag tror inte det här är för svårt att lösa. Men om jag är ute och cyklar så kanske det är en bra idé.
Låt oss se ifall det var så enkelt som jag tror?

/P

Dags att söka om officiellt stöd från SVT sida?


Har gjort en trevare via byrån som gjorde deras sida, men inte fått någon respons ännu tyvärr. Ska försöka fiska efter respons.

Det är det aldrig, men i detta fall tror jag du har rätt :)

Säg till om ni vill bolla lite idéer med de andra utvecklarna av pluginer så fixar jag access åt er till Campfirechatten som alla utvecklarna av pluginer använder.



EDIT: Min svensklärare vände sig nog just om i graven, men jag orkar inte fixa till meningen. :wink:



Gärna!

PM:a mig era epost-adresser så bjuder jag in er.



Detta körde jag med:


re.search(r'(pathflv=|dynamicStreams=url:)(.*?)[,&$]',flashvars).group(2)



fungerar dock inte heller, förmodligen för att den även får med filändelsen i url (jag läste någonstans att filändelsen inte ska med...):

'rtmpe://fl11.c90909.cdn.qbrick.com/90909/_definst_/kluster/20100705/PG-05002404-024-001-PINGUSERIE-mp4-c-v1.mp4'




re.search(r'(pathflv=|dynamicStreams=url:)(.*?)[,&$]',flashvars).group(2).rstrip('.mp4')





Tyvärr hjälper inte det för kunna spela upp alla url:ar, så det kanske är så att de börjat lägga på drm-skydd på dem som du misstänkte tidigare :-(

Hur som helst, vore det inte bra om vår "patchning" av utsökningen av "Content url:" blev incheckat i SVTPlay (version 1.1b, eller så), så man (åtminstone) kan fortsätta att browsa allt material, och spela upp det som inte är drm skyddat än (om det nu är så att det är problemet med de avsnitt som inte vill spelas upp).

Jag kan tex. börja titta på en del Fåret Shaun avsnitt igen efter patchen. Pingu-avsnitten verkar dock körda (iallafall de som fanns nu)

Vad tycker "authorn" av SVTPlay?

/P

Absolut. Skicka mig den patchade versionen så lägger vi upp den i App Storen efter att jag dubbelcheckat den. Jag håller dock på att fixa in Magnus i Campfirechatten där alla utvecklarna av plugins:en håller till. Där tror jag en bättre lösning kan diskuteras fram.


Den är minimal och får menyerna att fungera igen, + en delmängd av materialet också.
Då får vi nått som funkar "ok" tillsvidare iallafall.


<br />
--- SVT Play.bundle/Contents/Code/__init__.py   2010-07-07 00:35:51.000000000 +0200<br />
+++ SVT Play patch/__init__.py 2010-07-07 00:37:17.000000000 +0200<br />
@@ -13,7 +13,7 @@<br />
 <br />
 # Global constants<br />
 # - - - - - - - - - - - - - - - - - - - - - - - - - - - -<br />
-VERSION="1.1"<br />
+VERSION="1.1a"<br />
 <br />
 PLEX_PLAYER_URL = "http://www.plexapp.com/player/player.php?&url="<br />
 PLUGIN_PREFIX  = "/video/svt"<br />
@@ -271,7 +271,7 @@<br />
     <br />
 def GetContentUrl(pageElement):<br />
     flashvars = pageElement.xpath("//object[@id='playerSwf']/param[@name='flashvars']")[0].get("value")<br />
-    return re.search(r'pathflv=(.*?)[&$]',flashvars).group(1)<br />
+    return re.search(r'(pathflv=|dynamicStreams=url:)(.*?)[,&$]',flashvars).group(2)<br />
     <br />
 <br />
 # Replaces all running whitespace characters with a single space<br />




Testat lite mer, och .rstrip('.mp4') har ingen direkt effekt eftersom de "filerna" inte verkar fungera ändå, så jag har tagit bort den från patchen ovan.
(Det är lika bra att man ser hela url:en i debugloggen).

Ni båda bör ha fått en inbjudan till Campfire nu.




Meddela gärna när den här versionen ligger i App Store.

Vad härligt med folk som fixar o donar! Många tack!

// Odis

Här är en version som fungerar!



mbp-magnus:SVT Play.bundle malo$ git diff Contents/Code/__init__.py<br />
diff --git a/SVT Play.bundle/Contents/Code/__init__.py b/SVT Play.bundle/Contents/Code/__init__.py<br />
index 8663a4c..a3e7858 100644<br />
--- a/SVT Play.bundle/Contents/Code/__init__.py <br />
+++ b/SVT Play.bundle/Contents/Code/__init__.py <br />
@@ -177,8 +177,12 @@ def BuildGenericMenu(url, title, divId, paginate=False):<br />
         if (contentUrl.endswith('.flv')):<br />
             menuItems.append(VideoItem(contentUrl, clipName, clipSummary, clipLength,clipIcon))<br />
         else:<br />
-            # should be rtmp url <br />
-            contentUrl = PLEX_PLAYER_URL + contentUrl.replace("_definst_/","_definst_&clip=")<br />
+            # should be rtmp url<br />
+            if (contentUrl.endswith('.mp4')):<br />
+               #special case rmpte stream with mp4 ending.<br />
+               contentUrl = PLEX_PLAYER_URL + contentUrl.replace("_definst_/","_definst_&clip=mp4:")<br />
+            else:<br />
+               contentUrl = PLEX_PLAYER_URL + contentUrl.replace("_definst_/","_definst_&clip=")<br />
             menuItems.append(WebVideoItem(contentUrl, clipName, clipSummary, clipLength,clipIcon))<br />
         <br />
     # Note: must have "span" element, otherwise some wierd stuff can come along...<br />
@@ -271,7 +275,7 @@ def GetEpisodeInfo(episodeUrl):<br />
     <br />
 def GetContentUrl(pageElement):<br />
     flashvars = pageElement.xpath("//object[@id='playerSwf']/param[@name='flashvars']")[0].get("value")<br />
-    return re.search(r'pathflv=(.*?)[&$]',flashvars).group(1)<br />
+    return re.search(r'(pathflv=|dynamicStreams=url:)(.*?)[,&$]',flashvars).group(2)<br />




Ett problem kan vara att SVT verkar gå över till MP4 och erbjuda olika upplösningar för olika bandbredder... Denna kod klipper ju bara den URL som kommer först i listan. Enligt frpet så är det (enligt stickprovskontroll) den mest högupplösta versionen som kommer först.

a) Det kan man inte alltid veta
B) Det kanske inte alltid är lämpligt, om man inte har bra bandbredd.