Page 1 sur 1

PBVLC

Publié : lun. 05/mai/2008 21:07
par Droopy
C'est un frontal pour VLC qui permet de visualiser les chaines du multiposte free + les chaines de la TNT ( avec une carte tuner compatible BDA )

Voici le programme compilé ( avec les logos ) : PBVLC.zip
Image

Et voici le code source :

Code : Tout sélectionner

;/ PureBasic 4.10 / Patrice 29/04/08

#Debug=#False

;/ Tue tous les VLC ouvert si n'a pas été fermé
RunProgram("taskkill","/im vlc.exe","",#PB_Program_Hide|#PB_Program_Wait )


;{/ Constantes / Variables / Structures
#ZAPPING_DELAY=6000
#PORT=8888
#LargeurImage=70
#HauteurImage=54
Largeur=#LargeurImage+60
UseJPEGImageDecoder()
ExamineDesktops()
hauteur=DesktopHeight(0)-70

Enumeration 3000
  #SCROLLAREA
  #STATUS
  #MENU
  #NEXT
  #PREV
  #PLAYLISTFREE
  
  #ZAP
EndEnumeration

Structure Chaine
  Nom.s
  Logo.s
  Lien.s
EndStructure

Global Cid, NewList Chaines.Chaine(), DerniereChaineLue, Tid

;}

;{/ Procédures

Procedure Reception()
  *Buffer=AllocateMemory(1000)
  ReceiveNetworkData(Cid,*Buffer,1000)
  Debug "-- "+PeekS(*Buffer)
  FreeMemory(*Buffer)
  
EndProcedure

Procedure Envoie(Text.s)
  SendNetworkString(Cid,Text+#crlf$)
  Reception()
EndProcedure

Procedure Lecture(n)
    SelectElement(Chaines(),n)
    Envoie("clear")
    Envoie("add "+Chaines()\Lien)
    DerniereChaineLue=ListIndex(Chaines())
    If IsThread(Tid)
      StatusBarText(#STATUS,0,Chaines()\Nom+" (Zapping)", #PB_StatusBar_Center)
    Else
      StatusBarText(#STATUS,0,Chaines()\Nom, #PB_StatusBar_Center)
    EndIf
EndProcedure

Procedure Zapping()
  a=-1
  Repeat
    
    a+1
    
    If a=CountList(Chaines())
      a=0
    EndIf
    
    Lecture(a)
    Delay(#ZAPPING_DELAY)
  ForEver
EndProcedure

ProcedureDLL URLDownloadToFile(Url.s,File.s)
  retour=URLDownloadToFile_(0, Url, File, 0, 0)
  DeleteUrlCacheEntry_(Url)
  If retour=0 : retour=1 : Else : retour=0 : EndIf
  ProcedureReturn retour
EndProcedure

;}

;{/ Lecture / Ecriture du fichier ini ( Stocke / demande où est VLC )
If #Debug
  Ini.s="d:\PBVLC.ini"
Else
  Ini=GetPathPart(ProgramFilename())+"PBVLC.ini"
EndIf

OpenPreferences(Ini)
VLC.s=ReadPreferenceString("VLC","")
If VLC=""
  VLC=OpenFileRequester("VLC","","Exécutables|*.exe",1)
  If VLC=""
    End
  EndIf
  WritePreferenceString("VLC",VLC)
EndIf
;}

;{/ Lecture de chaines.txt et les met dans une LList
If #Debug
  Fid=ReadFile(#PB_Any,"d:\Chaines.txt")
Else
  Fid=ReadFile(#PB_Any,GetPathPart(ProgramFilename())+"chaines.txt")
EndIf

If Fid
  While Not Eof(Fid)
    Ligne.s=ReadString(Fid)
    Ligne=LTrim(RTrim(Ligne))
    If Ligne<>"" And Left(Ligne,1)<>";"
      AddElement(Chaines())
      Chaines()\Nom=StringField(Ligne,1,",")
      Chaines()\Logo=StringField(Ligne,2,",")
      Chaines()\Lien=StringField(Ligne,3,",")
    EndIf
  Wend
Else
  MessageRequester("Chaines.txt","introuvable")
  End
EndIf

;}

;/ Lance VLC avec les bonnes options
RunProgram(VLC,"--extraintf rc --rc-quiet --rc-host 127.0.0.1:"+Str(#PORT),"") ;/ Désentrelacement: --deinterlace-mode=bob --vout-filter deinterlace

;/ Connexion à VLC via port réseau
InitNetwork()
Cid=OpenNetworkConnection("127.0.0.1",#PORT)

;{/ Visuel
Fid=OpenWindow(0,0,0,Largeur,hauteur,"PBVLC",#PB_Window_SystemMenu)
CreateGadgetList(WindowID(0)) 
CreateStatusBar(#STATUS,WindowID(0))
CreateMenu(#MENU,WindowID(0))
MenuTitle("Chaines")
ScrollAreaGadget(#SCROLLAREA,10,10,#LargeurImage+40,hauteur-65,#LargeurImage+15,(CountList(Chaines()))*(#HauteurImage+10)+10,#HauteurImage)
  
  ;/ Pour chaque chaine : Ajout au menu / ajoute logo
  ForEach Chaines()
    MenuItem(ListIndex(Chaines()),Chaines()\Nom)
    
    If #Debug
      LogoChaine.s="d:\Logo\"+Chaines()\Logo+".jpg"
    Else
      LogoChaine.s=GetPathPart(ProgramFilename())+"Logo\"+Chaines()\Logo+".jpg"
    EndIf
    id=LoadImage(#PB_Any,LogoChaine)
    ResizeImage(id,#LargeurImage,#HauteurImage)
    If id
      ButtonImageGadget(n,10,10+#HauteurImage*n+10*n,#LargeurImage,#HauteurImage,ImageID(id))
      GadgetToolTip(n,Chaines()\Nom)
      n+1
    Else
      MessageRequester("Logo chaine",LogoChaine+" Introuvable")
    EndIf
  Next
  
  MenuTitle("Divers")
  MenuItem(#ZAP,"Zapper")
  MenuItem(#NEXT,"Chaine suivante")
  MenuItem(#PREV,"Chaine précédente")
  MenuItem(#PLAYLISTFREE,"Télécharger la playlist Free")
  
  AddKeyboardShortcut(0,#PB_Shortcut_Add,#NEXT)
  AddKeyboardShortcut(0,#PB_Shortcut_Subtract,#PREV)
  
CloseGadgetList()

SetActiveGadget(0)
;}



;/ Lecture automatique de la chaine précédente
Lecture(ReadPreferenceLong("LAST",0))

Repeat
  evt=WaitWindowEvent()
  
  If evt=#PB_Event_Gadget
    If EventGadget()< 3000
      If IsThread(Tid)
        KillThread(Tid)
      EndIf
      Lecture(EventGadget())
    EndIf
  EndIf
  
  If evt=#PB_Event_Menu
    
    If EventMenu()=#ZAP
      Tid=CreateThread(@Zapping(),0)
    EndIf
    
    If EventMenu()=#NEXT
      NextElement(Chaines())
      Lecture(ListIndex(Chaines()))
    EndIf
      
    If EventMenu()=#PREV
      PreviousElement(Chaines())
      Lecture(ListIndex(Chaines()))
    EndIf
    
    If EventMenu()=#PLAYLISTFREE
      URLDownloadToFile("http://mafreebox.freebox.fr/freeboxtv/playlist.m3u","c:\PlayListFree.txt")
    EndIf
    
    
    If EventMenu()<3000
      If IsThread(Tid)
        KillThread(Tid)
      EndIf
      Lecture(EventMenu())
    EndIf
    
  EndIf
  
Until evt = #PB_Event_CloseWindow

;/ Enregistre la dernière chaine lue
WritePreferenceLong("LAST",DerniereChaineLue)

Envoie("clear")
Envoie("quit")
Delay(500)
Vous aurez besoin d'installer VLC 0.9 beta : http://nightlies.videolan.org/build/win32/latest/

Il faut créer un fichier texte (placé à coté de l'exécutable) nommé Chaines.txt : NomChaine,Logo,Flux ( TNT ou Web )
Voici le mien pour exemple :
;/ Chaines TNT ( Chaines.xml de PouchinTV --> Frequence / SID )
TF1,tf1,dvb-t:// :dvb-frequency=562167 :program=1537
FRANCE 2,fr2,dvb-t:// :dvb-frequency=586167 :program=257
FRANCE 3,fr3,dvb-t:// :dvb-frequency=586167 :program=273
Canal +,canal,dvb-t:// :dvb-frequency=522167 :program=769
FRANCE 5,fr5,dvb-t:// :dvb-frequency=586167 :program=260
M6,m6,dvb-t:// :dvb-frequency=498167 :program=1025
ARTE,arte,dvb-t:// :dvb-frequency=586167 :program=261
Direct 8,direct8,dvb-t:// :dvb-frequency=474167 :program=513
W9,w9,dvb-t:// :dvb-frequency=498167 :program=1026
TMC,tmc,dvb-t:// :dvb-frequency=562167 :program=1542
NT1,nt1,dvb-t:// :dvb-frequency=498167 :program=1027
NRJ 12,nrj,dvb-t:// :dvb-frequency=562167 :program=1538
LCP,lcp,dvb-t:// :dvb-frequency=586167 :program=262
France 4,fr4,dvb-t:// :dvb-frequency=474167 :program=519
BFM TV,bfmtv,dvb-t:// :dvb-frequency=474167 :program=515
iTélé,itele,dvb-t:// :dvb-frequency=474167 :program=516
Europe 2 TV,europe2,dvb-t:// :dvb-frequency=474167 :program=517
GULLI,gulli,dvb-t:// :dvb-frequency=474167 :program=518
France O,fr0,dvb-t:// :dvb-frequency=586167 :program=374


;/ Chaines Free
RTL9,rtl9,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=210
AB1,ab1,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=211
TV5,tv5,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=206
Game One,gameone,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=220
MTV,mtv,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=219
AB Moteurs,abmoteurs,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=222
Euronews,euronews,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=205
Liberty TV,liberty-tv,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=215
Sky News,skynews,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=355
Demain TV,demain,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=227
Fashion TV,fashion-tv,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=221
;Freenews TV,freenews-tv,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=428
Histoire,histoire,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=235
Toute l'histoire,toutehist,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=250
Encyclopedia,encyclopedia,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=251
Mangas,mangas,rtsp://mafreebox.freebox.fr/freeboxtv/stream?id=253

Publié : ven. 09/mai/2008 9:07
par lolo_di_tolosa
Merci Droppy pour ce code