Visualizzazione post con etichetta xbmc. Mostra tutti i post
Visualizzazione post con etichetta xbmc. Mostra tutti i post

domenica 29 gennaio 2012

Plugin rai.tv per XBMC

Il plugin non funziona più.
Da parecchio aggiungerei...
Una possibilità di vedere le dirette Rai senza Silverlight è quella di usare RaiSmth https://addons.mozilla.org/it/firefox/addon/raismth/ (sorry only for linux).

martedì 6 aprile 2010

Aggiornamento del plugin rai.tv per XBMC

Ho corretto lo script, in quanto essendo diverse le versioni di python in mac e windows e linux, il plugin funzionava su mac, ma non sulle altre piattaforme.
Ho aggiunto anche le dirette di Euronews e Rai International.
L'ho provato e ora funziona su mac, windows e ubuntu 10.4. Chi è interessato lo può trovare
qui
P.S.
Da quanto riporta
Flavio Tordini i signori di rainet hanno dichiarato guerra agli "hackers" e utilizzeranno il DRM di microsoft.
Ho paura che la visione degli streaming diventerà sempre più complicata.
Il plugin non funziona più.
Una possibilità di vedere le dirette Rai senza Silverlight è quella di usare RaiSmth https://addons.mozilla.org/it/firefox/addon/raismth/ (sorry only for linux).

domenica 28 marzo 2010

Aggiornamento del plugin rai.tv per XBMC


Basandomi sulle indicazioni di Flavio Tordini (a cui vanno tutti i miei ringraziamenti), ho aggiornato il plugin per XBMC per visualizzare le dirette Rai. Mi piacerebbe a questo punto inserire anche il titolo del programma in onda, non dovrebbe essere difficile.
E' rimasto molto tempo nel mio computer perchè non ne sono molto soddisfatto, ma magari a qualcuno interessa.
Lo si può trovare qui

domenica 17 gennaio 2010

Aggiornamento del plugin rai.tv per XBMC


Ho aggiornato in seguito ai cambiamenti effettuati nello streaming dei contenuti, il plugin per XBMC per visualizzare le dirette Rai. Lo si può trovare qui

sabato 21 novembre 2009

Creare un plugin per XBMC parte 3


Nel caso a qualcuno possa servire, ho messo su googlecode il plugin delle dirette di Rai.tv lo si può trovare qui.
E' solo un esercizio, i canali degli streaming sono inseriti direttamente nel codice e non sono ricavati ogni volta dalla pagina web di conseguenza potrebbe non funzionare nel futuro.


lunedì 18 maggio 2009

Creare un plugin per XBMC parte 2


Scriviamo ora il plugin di XBMC per vedere le dirette web del sito rai.tv.

Abbiamo bisogno di:

i link degli streaming,

le icone della Rai e dei canali trasmessi,

le regex per l'estrazione degli url dai files asx.

I link degli streaming li abbiamo, le icone dei canali trasmessi le recuperiamo dal file xml scaricato (è il valore di <imageUnit name="nome canale - logo videowall" type="RaiTv RollOver Image"><image>/dl/images/nome icona.png</image>), mentre l'immagine della Rai la recuperiamo dal sorgente del sito (http://www.rai.tv/dl/RaiTV/images/logo_raitv.png).

Procediamo scaricando l'immagine della Rai nella directory del plugin rinominandola in default.tbn.

Editiamo il file default.py

nella routine CATEGORIES() inseriamo:

addDir('Rai1','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983',2,'http://www.rai.it/dl/images/1233832365974RaiUno_02.png')

addDir('Rai2','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=984',2,'http://www.rai.it/dl/images/1233832404832RaiDue02.png')

addDir('Rai3','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=986',2,'http://www.rai.it/dl/images/1233832447578RaiTre_02.png')

addDir('RaiNews24','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=1',2,'http://www.rai.it/dl/images/1233841893415RaiNews24_02.png')

addDir('RaiSport+','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=4145',2,'http://www.rai.it/dl/images/1233856927849raisport_.png')

addDir('RaiStoria','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24269',2,'http://www.rai.it/dl/images/1233857018728raistoria.png')

addDir('RaiEdu','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24268',2,'http://www.rai.it/dl/images/1233837355373RaiEdu1_02.png')

ovvero aggiungi un menu directory, con il nome Rai1, imposta il link http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983, imposta il mode 2, utilizza la funzione VIDEOLINKS() per l'elaborazione della regex e la creazione del menu con il link allo streaming, utilizza questa immagine come logo.

Nella routine VIDEOLINKS(url,name) inseriamo:

req = urllib2.Request(url)

req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6')

response = urllib2.urlopen(req)

link=response.read()

response.close()

match=re.compile('<ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX>').findall(link)

for url in match:

addLink(name,url,'')

ovvero apri una connessione all'url specificato, modifica lo User-Agent con quello di Mozilla di Ubuntu, calcola la regex, e crea il menu con l'url ricavato e il nome passato alla funzione.

Il nostro plugin è pronto e funzionante.

Lanciamo XBMC nella sezione Video scegliamo Plugin Video e successivamente Rai.tv e godiamoci la diretta!

Per completezza ecco il sorgente completo (trattandosi di python bisogna fare attenzione all'indentazione):

import urllib,urllib2,re,xbmcplugin,xbmcgui


__scriptname__ = "XBMC Video Plugin"

__author__ = 'fabrintosh [http://fabrintosh.blogspot.com]'

__date__ = '18-05-2009'

__version__ = "r001"


def CATEGORIES():

addDir('Rai1','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983',2,'http://www.rai.it/dl/images/1233832365974RaiUno_02.png')

addDir('Rai2','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=984',2,'http://www.rai.it/dl/images/1233832404832RaiDue02.png')

addDir('Rai3','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=986',2,'http://www.rai.it/dl/images/1233832447578RaiTre_02.png')

addDir('RaiNews24','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=1',2,'http://www.rai.it/dl/images/1233841893415RaiNews24_02.png')

addDir('RaiSport+','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=4145',2,'http://www.rai.it/dl/images/1233856927849raisport_.png')

addDir('RaiStoria','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24269',2,'http://www.rai.it/dl/images/1233857018728raistoria.png')

addDir('RaiEdu','http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24268',2,'http://www.rai.it/dl/images/1233837355373RaiEdu1_02.png')

def INDEX(url):

req = urllib2.Request(url)

req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6')

response = urllib2.urlopen(req)

link=response.read()

response.close()

match=re.compile('').findall(link)

for thumbnail,url,name in match:

addDir(name,url,2,thumbnail)


def VIDEOLINKS(url,name):

req = urllib2.Request(url)

req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6')

response = urllib2.urlopen(req)

link=response.read()

response.close()

match=re.compile('<ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX>').findall(link)

for url in match:

addLink(name,url,'')


def get_params():

param=[]

paramstring=sys.argv[2]

if len(paramstring)>=2:

params=sys.argv[2]

cleanedparams=params.replace('?','')

if (params[len(params)-1]=='/'):

params=params[0:len(params)-2]

pairsofparams=cleanedparams.split('&')

param={}

for i in range(len(pairsofparams)):

splitparams={}

splitparams=pairsofparams[i].split('=')

if (len(splitparams))==2:

param[splitparams[0]]=splitparams[1]

return param





def addLink(name,url,iconimage):

ok=True

liz=xbmcgui.ListItem(name, iconImage="DefaultVideo.png", thumbnailImage=iconimage)

liz.setInfo( type="Video", infoLabels={ "Title": name } )

ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=url,listitem=liz)

return ok



def addDir(name,url,mode,iconimage):

u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name)

ok=True

liz=xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage)

liz.setInfo( type="Video", infoLabels={ "Title": name } )

ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=True)

return ok



params=get_params()

url=None

name=None

mode=None


try:

url=urllib.unquote_plus(params["url"])

except:

pass

try:

name=urllib.unquote_plus(params["name"])

except:

pass

try:

mode=int(params["mode"])

except:

pass


print "Mode: "+str(mode)

print "URL: "+str(url)

print "Name: "+str(name)


if mode==None or url==None or len(url)<1:

print ""

CATEGORIES()

elif mode==1:

print ""+url

INDEX(url)


elif mode==2:

print ""+url

VIDEOLINKS(url,name)


xbmcplugin.endOfDirectory(int(sys.argv[1]))


domenica 17 maggio 2009

Creare un plugin per XBMC parte 1


Creare un plugin per XBMC come avevo spiegato (male) è semplice. Scendiamo nel pratico:

voglio  vedere la diretta web dei canali rai con XBMC.

Dopo avere scaricato il tutorial dal sito di XBMC lo scompattiamo e creiamo una cartella dal nome Rai.tv in:

~/.xbmc/plugins/video/ (Linux)

~/Library/Application Support/XBMC/plugins/video/ (Mac)

c:\Program Files\XBMC\plugins\video\ (Windows).

copiamo il file default.py ed il file test.py presenti nel tutorial nella cartella che abbiamo creato. 

Come già indicato in numerosi post come ad esempio qui recuperiamo la lista dei link che ci occorrono.

Se non vogliamo correre rischi ed utilizzare la lista più recente, si può, spulciando il sorgente della pagina www.rai.tv, cercare la variabile channelXmlPath che ci fornirà il link del file xml che contiene gli indirizzi delle dirette (sottochiave <url> di <videoUnit name="nome del canale - full" type="RaiTv Diretta Full Video">).

Per verificare il collegamento apriamo con un editor il file test.py. 

Alla variabile url assegnamo  un link (ad esempio Rai1) http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983 e aggiungiamo dopo la riga response.close() la riga print link affinchè test.py sia così:


import urllib2,urllib,re


url='http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983'


req = urllib2.Request(url)

req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3')

response = urllib2.urlopen(req)

link=response.read()

response.close()

print link

match=re.compile('Regular expression here').findall(link)

print match


Salviamo, apriamo il terminale (o il prompt dei comandi) ci rechiamo nella directory del plugin (cd ~/Library/Application Support/XBMC/plugins/video/Rai.tv)

digitiamo python test.py e vediamo cosa stampa su schermo la nostra print:

<ASX VERSION="3.0">     <ENTRY>        <REF HREF="http://www.banneradmin.rai.it/ads/siparietti/buona_visioneMed_Progautopromo.wmv" />     </ENTRY>  </ASX>

Se proviamo ad aprire con vlc il link ottenuto (http://www.banneradmin.rai.it/ads/siparietti/buona_visioneMed_Progautopromo.wmv) vedremo solo un banner di buona visione e  null'altro. Questo perchè dobbiamo anche modificare lo User Agent inviato al sito della rai utilizzando quello di Mozilla di una qualsiasi distribuzione linux:

req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6')

Otterremo questa risposta:

<ASX VERSION="3.0">  <ENTRY><REF HREF="mms://livestream.rai.it.edgestreams.net/reflector:64084?auth=daEcyc4agdPaTcNbSaGbAdPcKb6d4aldjdV-bkecTK-b4-ElxuxHo&aifp=V001" />  </ENTRY>  </ASX>

Abbiamo ottenuto un link mms!

Per estrarre il link mms della diretta da comunicare al plugin di XBMC dobbiamo utilizzare una regex, ma prima solitamente elimino spazi, tabulatori, ritorni a capo superflui per potermi concentrare sulla espressione più agevolmente. Quindi procediamo a sostituire la riga link=response.read() con:

link = ''

for line in response.read().split( '\n' ):

    link += line.lstrip().rstrip()

link = link.replace( '\r', '' ).replace( '\t', '' ).replace( '\n', '' )

Otterremo così:

<ASX VERSION="3.0"><ENTRY><REF HREF="mms://livestream.rai.it.edgestreams.net/reflector:64084?auth=daEcfd4cgdEatbAblddaQbEb8azdhdqaVae-bkec_a-b4-FmxwxHn&aifp=V001" /></ENTRY></ASX> che è molto più leggibile.

L'espressione che fa al caso nostro è <ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX> e la inseriamo nella funzione re.compile('expr').findall(link)

match=re.compile('<ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX>').findall(link) e estraiamo il link trovato.

if match:

for url in match:

print url + '\r'

eliminiamo le righe print link e print match. test.py dovrebbe ora avere la seguente fisionomia:


#!/usr/bin/python


import urllib2,urllib,re


url='http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983'


req = urllib2.Request(url)

req.add_header('User-Agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6')

response = urllib2.urlopen(req)

link = ''

for line in response.read().split( '\n' ):

    link += line.lstrip().rstrip()

link = link.replace( '\r', '' ).replace( '\t', '' ).replace( '\n', '' )

response.close()

match=re.compile('<ASX VERSION="3.0"><ENTRY><REF HREF="(.+?)" /></ENTRY></ASX>').findall(link)

if match:

for url in match:

print url + '\r'

(in grassetto le parti modificate del file test.py originale).

python test.py  stamperà sullo schermo mms://livestream.rai.it.edgestreams.net/reflector:64084?auth=daEcfd4cgdEatbAblddaQbEb8azdhdqaVae-bkec_a-b4-FmxwxHn&aifp=V001 che possiamo provare ad aprire con vlc per verificare il collegamento.

Ora che abbiamo link e regex possiamo passare alla sviluppo del plugin vero e proprio.....

XBMC ed i plugins


A casa ho due vecchi computer  che svolgono la funzione di HTPC. 

Hanno  installato Freevo che è a mio parere il migliore software HTPC open source esistente.

Freevo è scritto in python, utilizza massivamente mplayer (anche se supporta vlc e xine), gira principalmente su Linux  e  non ha particolari richieste hardware, consentendo quindi di avere un ottimo sistema di home theatre a costi contenuti.

Nel mio caso utilizzo un PIII ed un PIV.

E'  estensibile grazie a  numerosi plugins. Ne ho scritto qualcuno anch'io e uno di questi è nella distribuzione ufficiale, per la precisione quello di wwitv.  

Installare freevo sul mio MacBook con Mac OS X è una operazione fattibile anche se non semplicissima, e per ora non ho abbastanza tempo libero per farlo.

Ho provato quindi XBMC, finalmente in versione Intel e PPC, bello pronto da installare con il suo file dmg.

Le richieste hardware sono decisamente più elevate, rendendolo inutilizzabile sui due  htpc che ho in casa, ma la grafica è decisamente carina, si interfaccia agevolmente con i server UPnP (il sistema che utilizzo per condividere musica, film foto e quant'altro) e fa lui stesso da server UPnP.

E' estensibile tramite plugins, e indovinate un po' in che linguaggio? Python!

Ho provato subito a scriverne uno di prova, e sono rimasto piacevolmente colpito dalla presenza di:

un soddisfacente tutorial, una maggiore documentazione, uno scheletro di plugin con cui partire, poche routines chiare ed accessibili.

Creare un plugin video in XBMC può addirittura consistere nel trovare la giusta regex in una pagina web ed passare i risultati a  

addDir(name,url,mode,thumbnail)o addLink(name,url,tumbnail)

Quindi come spiegato nell'ottimo tutorial, inserendo in CATEGORIES() 

addDir("MOVIES","http://www.tvdash.com/movies.html",1," http://reggiebibbs.files.wordpress.com/2007/12/the-movies360-crop.jpg") 

avremo un menu di tipo cartella "Movies" il cui clic  invocherà la routine INDEX() passando come argomento l'url http://www.tvdash.com/movies.html.

Compito della funzione INDEX sarà quello di scaricare la pagina web ed applicare la regex desiderata per poi passare a addLink(name,url) i links dei video trovati, creando dei sotto menu "links" che avranno il compito di lanciare il player collegandosi all'url del video specificato.

Decisamente veloce e semplice.