Modérateurs: Modération Forum Home-Cinéma, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: corsimusic, guittet, Letoatreide, mentosse et 57 invités

Tout ce qui concerne les logiciels lié au HC sur ordinateur (PC, Mac, Linux...)
Règles du forum
Avant de poster, merci de prendre connaissance des règles du forum : à lire avant de poster

Piloter une Dune avec XBMC

Message » 29 Mar 2014 1:50

Hello messieurs Duniens,

Une petit folie m'a pris récemment : piloter la Dune avec une interface XBMC

yaDIS + yNU est une tuerie par rapport aux restrictions imposées par HDI concernant l'interface.

Mais XBMC a 3 gros avantages :
- pas besoin d'un ordinateur pour scrapper (quand on ajoute presque quotidiennement des séries c'est un gros plus ^^ )
- ultra personnalisable
- c'est beaaaauuuuuu

Ne voulant pas repartir sur du PCHC ( = plus de tunning que de visionnage), j'ai commencé à me renseigner si y avait pas moyen d'utiliser le meilleur des 2 mondes :
- XBMC pour une interface au poil
- La Dune pour tout lire sans prise de tête

En glanant de ci de là des informations (Dune IP Control, XBMC External Player) et en me retroussant les manches (batch power!) j'ai atteint mon objectif :

Au final, je continue de tout piloter avec ma harmony, d'un clic la TV l'ampli, XBMC et la Dune sont allumés et je me retrouve sur l'interface XBMC
Dès que je lance une vidéo, la Dune rentre en action, l'ampli commute automatiquement, et les boutons de la télécommande qui pilotaient XBMC pilotent maintenant la Dune (sans changer d'activité ce serait de la triche, et pas très WAF!)
Quand la vidéo se termine ou qu'on l'arrête, hop ça repart tout seul sur XBMC :)

Voilou, que du bonheur, même si j'y ai passé un petit (énorme) paquet d'heures pour tout peaufiner (c'est pas fini, encore pas mal de taf coté télécommande).


Fin voilà, je pense poster un petit tuto dès que tout sera blindé, si ça peut aider des petits geeks comme moi et si ça peut leur éviter quelques nuits blanches ;)

Donc dès que j'aurais tout finalisé, je mettrai à jour ce post en un beau tuto :)
djoole
 
Messages: 3125
Inscription Forum: 25 Avr 2007 0:43
Localisation: Val d'oise
  • offline

Message » 29 Mar 2014 1:50

Alors, je répète l'objectif : Utiliser XBMC comme interface de navigation dans ses médias, et utilisation intégrée de la Dune pour la lecture de ces même médias (comprendre basculement automatique vers la Dune sur lancement d'une vidéo sous XBMC, puis retour automatique sous XBMC à la fin ou l'arrêt de la vidéo).
(avec en petit bonus, l'automatisation du décalage audio de -0,22sec pour les MKV :) )

Je vais décrire la façon dont je m'y suis pris, mais en fonction du matériel et des environnements logiciels de chacun, certaines choses devront être adaptée.
C'est pourquoi je liste l'environnement utilisé :
  • PC sous Windows Seven avec XBMC installé et une ou plusieurs sources vidéos SMB déclarées
  • Dune
  • Vidéos sur un NAS (partage SMB)
  • Matériel HC (Ampli, Dune, PC, TV) pilotable par IP Control
  • Logiciel permettant d'envoyer des commandes HTTP POST : GNU Wget


1. Configuration de l'External Player dans XBMC

Sous c:\users\votre_user\AppData\Roaming\XBMC\userdata, créer un fichier playercorefactory.xml qui contient le texte suivant :

Code: Tout sélectionner
<playercorefactory>
 <players>
   <player name="DUNE" type="ExternalPlayer" audio="false" video="true">
     <filename>C:\dunefeeder.bat</filename>
     <args>"{1}"</args>
     <hidexbmc>false</hidexbmc>
     <hideconsole>false</hideconsole>
     <warpcursor>none</warpcursor>
    <playcountminimumtime>999999</playcountminimumtime>
   </player>
 </players>
 <rules action="prepend">
  <rule video="true" player="DUNE">
   <rule internetstream="true" player="videodefaultplayer" />
  </rule>
 </rules>
</playercorefactory>


Ce fichier va faire en sorte que lorsqu'une vidéo sera lancée depuis XBMC, cela passera le chemin smb de la vidéo à un script batch, qui pilotera lui-même la lecture de la vidéo au niveau de la Dune.

NB : si l'environnement n'est pas Windows Seven, le chemin diffèrera, Google est votre ami.


2. Création du script batch dunefeeder.bat

Placer dans C: un fichier dunefeeder.bat qui contient le code suivant :

Code: Tout sélectionner
@echo off
rem dunefeeder for feeding videos to your dune from a Windows Seven PC with XBMC - by djoole - v0.1


set wget="C:\Program Files (x86)\GnuWin32\bin\wget.exe"

echo raw url : %1>c:\debug.log

rem Moving antislashes to slashes
set url=%1
set url=%url:\=/%

rem Removing stuff to make DVD/BD playback work
set url=%url:/VIDEO_TS/VIDEO_TS.IFO=%
set url=%url:/BDMV/PLAYLIST/00000.mpls=%
set url=%url:/BDMV/MovieObject.bdmv=%
set url=%url:/BDMV/index.bdmv=%

rem Enconding ampersands
setlocal EnableDelayedExpansion EnableExtensions
set "url=!url:&=%%26!"

rem Removing double quotes
set url=%url:"=%

rem Telling the receiver to switch to BD input
%wget% -O nul --post-data="<YAMAHA_AV cmd=\"PUT\"><Main_Zone><Input><Input_Sel>BD/HD DVD</Input_Sel></Input></Main_Zone></YAMAHA_AV>" http://10.0.0.11/YamahaRemoteControl/ctrl

rem Waiting a little for the TV to sync
TIMEOUT /T 1 /NOBREAK

rem Telling the Dune to start playback
echo command : %wget% -O c:\result.txt "http://dune/cgi-bin/do?cmd=launch_media_url&action_on_exit=black_screen&media_url=smb:!url!">>c:\debug.log
%wget% -O c:\result.txt "http://dune/cgi-bin/do?cmd=launch_media_url&action_on_exit=black_screen&media_url=smb:!url!"

rem If it's a mkv, delay the audio for 0,22sec
echo.!url! | findstr /C:".mkv">nul && (
   TIMEOUT /T 5 /NOBREAK
   %wget% -O nul "http://dune/cgi-bin/do?cmd=ir_code&ir_code=BF40BF00"
   %wget% -O nul "http://dune/cgi-bin/do?cmd=ir_code&ir_code=E817BF00"
   %wget% -O nul "http://dune/cgi-bin/do?cmd=ir_code&ir_code=E817BF00"
   %wget% -O nul "http://dune/cgi-bin/do?cmd=ir_code&ir_code=E817BF00"
   %wget% -O nul "http://dune/cgi-bin/do?cmd=ir_code&ir_code=E817BF00"
   %wget% -O nul "http://dune/cgi-bin/do?cmd=ir_code&ir_code=EB14BF00"
)

rem Now waiting for the playback to finish
TIMEOUT /T 19 /NOBREAK
:test
TIMEOUT /T 1 /NOBREAK
%wget% -O c:\result.txt "http://dune/cgi-bin/do?cmd=status"
findstr /M /C:"name=\"player_state\" value=\"file_playback\"" c:\result.txt
if not ERRORLEVEL 1 (
   findstr /M /C:"name=\"playback_state\" value=\"stopped\"" c:\result.txt
   if not ERRORLEVEL 1 (
      goto :end
   )
)
findstr /M /C:"name=\"player_state\" value=\"navigator\"" c:\result.txt
if not ERRORLEVEL 1 (
   goto :end
) else (
   goto :test
)
findstr /M /C:"name=\"player_state\" value=\"standby\"" c:\result.txt
if not ERRORLEVEL 1 (
   goto :end
) else (
   goto :test
)

:end
rem Telling the receiver to switch back to DVD input
%wget% -O nul --post-data="<YAMAHA_AV cmd=\"PUT\"><Main_Zone><Input><Input_Sel>DVD</Input_Sel></Input></Main_Zone></YAMAHA_AV>" http://10.0.0.11/YamahaRemoteControl/ctrl


NB : les commandes de pilotage des entrées HDMI de l'ampli ne fonctionneront que pour un ampli Yamaha (DSP-Zx)
Ces dernières devront être adaptées pour votre ampli (Google reste votre ami pour la vie).
Si l'ampli n'est pas IP contrôlable, tout n'est pas perdu, il vous faudra un blaster IR (tel que l'USB-UIRT) pour piloter votre ampli depuis le PC par IR (en utilisant par exemple EventGhost en ligne de commande qui se chargera, via le fichier batch, d'envoyer la bonne séquence IR à l'ampli).

NB2 : Apparemment depuis la beta 4 (version Seven) de Gotham, XBMC ne passe plus correctement les caractères accentués, ce qui fait que le batch ne peut plus les encoder correctement, ce qui abouti à une erreur d'ouverture d'URL du coté de la Dune. Je n'ai pas réussi à m'en sortir, donc la seule solution que j'ai trouvé est de supprimer les accents des noms de dossiers/fichiers

Et bien voilà, y a plus qu'à apprécier l'interface d'XBMC et tous ses avantages, tout en continuant de bénéficier des compétences en matières de lecture vidéo de la Dune :)


Après, pour piloter le tout, je ne saurais que conseiller le logiciel iRule (iOS et Android) qui permet de se confectionner une interface tactile de pilotage aux petits oignons.

La mienne qui me permet donc de piloter tout mon HC dont XBMC en phase navigation et la Dune en phase visionnage (avec bien sûr démarrage/arrêt automatique du matériel en fonction des activités) ressemble à ça (work in progress) :

Image

Image

Image

Image

Ou bien on peut toujours utiliser une télécommande universelle (type Logitech Harmony), mais là ça se complique, car la télécommande ne saura pas faire la différence entre une phase navigation sous XBMC, et une face lecture sous la Dune, hors les boutons haut/bas/gauche/droite/enter n'auront pas la même fonction dans chacune de ces 2 phases.

C'était mon cas avant que je passe sur iRule, et là ça devient compliqué. Pour ceux intéressés je donne les grandes lignes :
1. Utilisation d'un récepteur infrarouge FLIRC sur le PC qui héberge XBMC
2. Utilisation d'EventGhost sur le PC qui héberge XBMC
3. Utilisation d'un profil lambda Logitech Harmony qui permettra de mapper suffisamment de codes IR vers des touches et combinaisons de touches du PC
4. Configuration de FLIRC sur le PC de sorte à mapper les codes IR de la télécommande universelle vers des combinaisons touches clavier
5. Configuration d'EventGhost et des Exclusives (très bon tuto) de sorte à mapper les combinaisons claviers vers des actions qui changeront en fonction de la fenêtre active (XBMC actions XMBC, dunefeeder.bat envoi de commandes wget)
NB : je pense qu'il y'a moyen de zapper le 4. et de mapper directement les entrées IR dans EventGhost, mais pas essayé, car n'ayant utilisé que EventGhost dans un 2ème temps j'avais déjà tout mappé sur des combi de touches.

Si on fait bien les choses, on a un truc ultra WAF (je navigue dans mes jaquettes de films sous XBMC avec les flèche gauche/droite et le OK de ma télécommande, et je peux également utiliser ces même touches pour choisir la langue audio et les sous-titres sous la Dune)

Mais bon, c'est hachement moins prise de tête avec une interface iRule ;)


Mise à jour du 12/05/14 :
- Redirection des wget vers nul pour éviter la création de fichiers de sorties inutiles
- Modification de la tempo d'attente entre le lancement de la vidéo sur la Dune et le 1er check d''état de lecture : passage de 15 à 20 car 15 ne suffit pas pour certains BD, la Dune passant entre la 15ème et la 20ème seconde par un état "arrêté"

Mise à jour du 10/05/14 :
- Ajout d'un test sur état standby de la Dune
- Ajout de la prise en charge du lancement d'un index.bdmv par XBMC

Mise à jour du 22/04/14 :
- Ajout du NB suivant :
NB2 : Apparemment depuis la beta 4 (version Seven) de Gotham, XBMC ne passe plus correctement les caractères accentués, ce qui fait que le batch ne peut plus les encoder correctement, ce qui abouti à une erreur d'ouverture d'URL du coté de la Dune. Je n'ai pas réussi à m'en sortir, donc la seule solution que j'ai trouvé est de supprimer les accents des noms de dossiers/fichiers

Mise à jour du 21/04/14 :
- Modification de la tempo d'attente entre le lancement de la vidéo sur la Dune et le 1er check d''état de lecture : passage de 10 à 15 car 10 ne suffit pas pour un BD, la Dune passant entre la 10ème et la 15ème seconde par un état "arrêté"
Dernière édition par djoole le 10 Aoû 2014 13:40, édité 7 fois.
djoole
 
Messages: 3125
Inscription Forum: 25 Avr 2007 0:43
Localisation: Val d'oise
  • offline

Message » 29 Mar 2014 1:50

.
djoole
 
Messages: 3125
Inscription Forum: 25 Avr 2007 0:43
Localisation: Val d'oise
  • offline

Message » 29 Mar 2014 11:30

Voici ma config, pour une utilisation avec RPI/openelec :

Prérequis : le CEC dans XBMC doit être désactivé

Playercorefactory : permet de dire à XBMC de lancer un script - dunefeeder.sh - au lieu de lire lui même la vidéo
Code: Tout sélectionner
<playercorefactory>
 <players>
   <player name="DUNE" type="ExternalPlayer" audio="false" video="true">
     <filename>/storage/.xbmc/userdata/dunefeeder.sh</filename>
     <args>"{1}"</args>
     <hidexbmc>false</hidexbmc>
   </player>
 </players>
 <rules action="overwrite">
   <rule video="true" player="DUNE">
    <rule internetstream="true" player="videodefaultplayer" />
   </rule>
 </rules>
</playercorefactory>


dunefeeder.sh : permet de lancer la vidéo sur la dune et de contrôler l'état de lecture de celle-ci.
Code: Tout sélectionner
#!/bin/bash
# dunefeeder for feeding videos to your dune from a Windows Seven PC with XBMC - by djoole - v0.1
# fork for raspberry pi by Lyksyr - switch hdmi port by cec on AVR Yamaha

# Telling the receiver to switch to DUNE input - HDMI 1
`echo "tx 15 44 69" | cec-client -s -d 1`

# Waiting a little for the TV to sync
sleep 7;

# url encode via python for spaces and accents
url=$(python -c "import urllib; print urllib.quote('''$1''')");

# Telling the Dune to start playback
wget -O - "http://192.168.0.199/cgi-bin/do?cmd=launch_media_url&action_on_exit=black_screen&media_url=$url"

# Now waiting for the playback to finish
play=1;
while [ $play -eq 1 ]
do
   sleep 1;
   wget -O /storage/.xbmc/userdata/dunefeeder.html "http://192.168.0.199/cgi-bin/do?cmd=status";
   if grep -c -h -e 'name=\"player_state\" value=\"file_playback\"' "/storage/.xbmc/userdata/dunefeeder.html"
   then
      if grep -c -h -e 'name=\"playback_state\" value=\"stopped\"' "/storage/.xbmc/userdata/dunefeeder.html"
      then
         play=0;
      fi
   fi
   if grep -c -h -e 'name=\"player_state\" value=\"navigator\"' "/storage/.xbmc/userdata/dunefeeder.html"
   then
         play=0;
   fi
   if grep -c -h -e 'name=\"player_state\" value=\"standby\"' "/storage/.xbmc/userdata/dunefeeder.html"
   then
      play=0;
   fi
done


# Telling the receiver to switch back to XBMC input - HDMI 2
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`
`echo "tx 15 44 69" | cec-client -s -d 1`


autoexec.py : permet, au démarrage de xbmc, de faire un nettoyage médiathèque et un scan des nouveautés automatiquement. Et de rebasculer sur l’entrée hdmi du xbmc parce la dune prends la main.
Code: Tout sélectionner
import xbmc
import os
import time
xbmc.executebuiltin('CleanLibrary(video)')
time.sleep(20);xbmc.executebuiltin('UpdateLibrary(video)')


Tous les fichiers sont dans le userdata

Comportement :

au démarrage, après 1 minute environ, le xbmc s'affiche (ce délai ne me dérange pas, pendant ce temps là la lampe du vidéoprojecteur chauffe)
le nettoyage est fait.
Il scanne les nouveaux fichiers, j'ai la main
je choisis la vidéo, je la lance.
J'ai mis une pause de 7 secondes, car si je lance direct la vidéo, l'ampli n'arrive pas à gérer le changement de fréquence et me met un message "mode non compatible"
La vidéo se lance donc...
Pendant ce temps là, toutes les secondes le dunefeeder demande à la dune où elle en est. si la dune est en mode stop ou en mode navigation, on lui dit de revenir sur le xbmc
Dernière édition par lyksyr le 06 Juil 2014 15:58, édité 6 fois.
lyksyr
 
Messages: 1829
Inscription Forum: 27 Déc 2007 17:08
Localisation: Angers
  • offline

Message » 29 Mar 2014 12:05

Je suis très intéressé par ton projet,tu passes par un raspberry? qui lis le flux vidéo le raspberry ou le dune? car j'ai pour projet de monter mon ambilight maison via un raspberry et j'aurai bien tenté l'aventure avec toi sur ton projet
djvautrien2
 
Messages: 174
Inscription Forum: 18 Fév 2009 23:58
  • offline

Message » 29 Mar 2014 13:11

Idée super intéressante. J'ai hâte de savoir comment tu fais. J'imagine que le principe c'est de demander au Pi de lancer une commande ip a la dune au lieu de lire le fichier lui même. Je savais pas que c'était possible...

Et comment tu fais pour constituer ta base de films sur Xbmc dans ce cas ?
Mr Eric
 
Messages: 31459
Inscription Forum: 19 Mai 2004 10:33
  • offline

Message » 29 Mar 2014 16:23

Alors je ne sais pas comment djoole a fait, mais moi je suis passé par un rpi, sous openelec.

Il suffit de créer un fichier playercorefactory.xml dans le répertoire partagé userdata.
Voici le moyen :
Code: Tout sélectionner
<playercorefactory>
 <players>
   <player name="WGET" type="ExternalPlayer" audio="false" video="true">
     <filename>wget</filename>
     <args>"http://192.168.0.199/cgi-bin/do?cmd=start_file_playback&speed=0&media_url={1}"</args>
     <hidexbmc>false</hidexbmc>
     <hideconsole>false</hideconsole>
     <warpcursor>none</warpcursor>
   </player>
 </players>
 <rules action="prepend">
   <rule video="true" player="WGET"/>
 </rules>
</playercorefactory>


C' est bien sur la dune qui lit le fichier.
Dans mon exemple je lui dit de lire le fichier a partir de zéro et de mettre en pause, vu que je n' ai pas encore regardé pour basculer l' entrée HDMI automatiquement via le cec du rpi
J'ai encore un élément uniquement IR, comme djoole, c' est le projecteur. J' avais regardé pour mettre un émetteur IR sur le rpi mais pas trouvé de truc hyper simple sinon j' aurai fait une macro projo/HDMI
Mon but est de tout piloter sur tablette

Et pour la dernière question, une fois le xbmc configuré, tu programme une touche pour faire la mai de la médiathèque et c' est tout
Dernière édition par lyksyr le 15 Avr 2014 9:12, édité 1 fois.
lyksyr
 
Messages: 1829
Inscription Forum: 27 Déc 2007 17:08
Localisation: Angers
  • offline

Message » 30 Mar 2014 1:56

je vais suivre car ça m'interesse fortement :wink: deplus je suis voisin avec notre ami djoole...
patjero
 
Messages: 8613
Inscription Forum: 17 Sep 2003 2:34
Localisation: neuf cinq
  • offline

Message » 30 Mar 2014 3:23

djvautrien2 a écrit:Je suis très intéressé par ton projet,tu passes par un raspberry? qui lis le flux vidéo le raspberry ou le dune? car j'ai pour projet de monter mon ambilight maison via un raspberry et j'aurai bien tenté l'aventure avec toi sur ton projet

J'ai failli utiliser un Rpi, mais au final vu que j'ai un PC de jeux dans mon HC (complètement silencieux tant que je lance pas de jeux ;) ) j'ai plutôt choisi d'installer XBMC sous Seven.
La puissance du PC par rapport à un Rpi me permet d'utiliser Aeon MQ5, une skin hautement personnalisable, me permettant entre autre d'avoir un menu de navigation au petits oignons (je détaillerai tout ça aussi dans le tuto)

Mr Eric a écrit:Idée super intéressante. J'ai hâte de savoir comment tu fais. J'imagine que le principe c'est de demander au Pi de lancer une commande ip a la dune au lieu de lire le fichier lui même. Je savais pas que c'était possible...

Et comment tu fais pour constituer ta base de films sur Xbmc dans ce cas ?

Oui c'est exactement ça, en gros, comme l'a montré lyksyr, il faut déclarer un external player dans XBMC, qui sera utilisé pour envoyer des HTTP GET à la Dune
A ce propos, un très bon site qui référence toute la API IP Control de la Dune (bien mieux que le vieux fichier txt de HDI) : https://code.google.com/p/dune-api-code ... iReference

Pour la base de films, c'est toute la puissance de XBMC : y a rien à faire, il scanner périodiquement (ou à la demande bien sûr) tes dossiers source et scrappe les nouveautés :)
Le seul truc à faire est être bien carré dans le nommage des dossiers, car à la moindre erreur, il ne trouve pas les infos du film/série et ne l'ajoute pas à la bibliothèque.
Le seul moyen de voir ça est d'aller dans les logs!
Ca aurait quand même été bien un petit message d'avertissement.
djoole
 
Messages: 3125
Inscription Forum: 25 Avr 2007 0:43
Localisation: Val d'oise
  • offline

Message » 30 Mar 2014 11:12

Je suis aussi très intéressée par le sujet
ALT
 
Messages: 1252
Inscription Forum: 10 Oct 2006 11:45
  • offline

Message » 04 Avr 2014 9:02

Je viens de passer d' une Dune à XBMC.
La 13 beta 3 est juste au top chez moi... super ergonomie, ça lit absolument tout et pas besoin d' installer 300.000 softs et configs, juste XBMC et basta.
Chez moi il faut virer toutes les accélérations hard, décoder en soft et l' image est déjà largement au niveau de la Dune.
Mamiya
 
Messages: 317
Inscription Forum: 02 Déc 2004 21:19
Localisation: Tours
  • offline

Message » 14 Avr 2014 23:54

Ca y est, je me suis enfin tapé le speed d'écrire ce petit tuto.
Ca se trouve en 2ème post de ce topic!
djoole
 
Messages: 3125
Inscription Forum: 25 Avr 2007 0:43
Localisation: Val d'oise
  • offline

Message » 15 Avr 2014 9:13

Merci djoole

je vais regarder ça de très près
lyksyr
 
Messages: 1829
Inscription Forum: 27 Déc 2007 17:08
Localisation: Angers
  • offline

Message » 15 Avr 2014 12:49

super, merci pour le tuto. ;)

Pas super facile le coup de la télécommande :(

Une petite vidéo pour montrer le résultat final peut-être ?
Mr Eric
 
Messages: 31459
Inscription Forum: 19 Mai 2004 10:33
  • offline

Message » 15 Avr 2014 14:33

Une vidéo de quoi exactement? :)
djoole
 
Messages: 3125
Inscription Forum: 25 Avr 2007 0:43
Localisation: Val d'oise
  • offline


Retourner vers Logiciel PC Home-cinéma

 
  • Articles en relation
    Dernier message