Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[HOWTO] "Gentoo media box" sous XOrg
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
razer
l33t
l33t


Joined: 08 Oct 2004
Posts: 893
Location: Paris - France

PostPosted: Tue Oct 04, 2005 3:23 pm    Post subject: [HOWTO] "Gentoo media box" sous XOrg Reply with quote

Bon, à mon tour d'apporter ma modeste contribution à cet HOWTO permettant la même opération sur framebuffer, et dont je me suis bien inspiré
Après de longues heures de galère, je suis parvenu à mon tour à faire ma propre Mediabox sous Xorg
Voici sur quoi je suis parti, nul besoin de préciser qu'il s'agit de matos de récup :lol: :
CONFIG MATERIELLE :
P3 550 Mhz - Chipset Intel PIIXn
Nvidia GeForce2 MX 400, sortie Télé
SB Live 5.1
DD 2 Go
Lecteur DVD Pioneer
Télécommande ATI Remote Wonder

Mon cahier des charges :
Lecture des vidéos des principaux formats avec :
le panscan (zoom de l'image) -> XORG requis
Le format AC3 en sortie 6 canaux analogiques 3 jacks -> ALSA requis
Lecture de musique ogg/mp3/cdaudio
Visionnage d'images
Contrôle grace à la remote ATI -> LIRC
Connexion sur téléviseur
Démarrage rapide -> Software suspend 2
Montage automatique cd/usbstorage -> HAL + DBUS + IVMAN

L'architecture logicielle :
Kernel 2.6.10 avec SoftwareSuspend patch et script hibernate
Drivers Nvidia 6628 (les plus récents rendaient ma sortie télé HS)
Xorg
Lirc 0.7.2
Freevo
Mplayer 1.0pre7

Je n'ai malheureusement pas le temps de détailler la totalité de mon installation, mais je vais rajouter quelques configs et scripts pouvant être intéressants.

Freevo
Il est lancé en mode X11, grâce aux drivers nvidia. C'est le prix à payer pour me permettre le zoom de l'image (panscan) sous mplayer. C'était une des limitations de la Geexbox (avec le son AC3), qui m'a décidé à me lancer dans ma propre aventure.
donc tout d'abord le /etc/freevo/freevo.conf :
Code:
display = x11
geometry = 800x600
jpegtran = /usr/bin/jpegtran
lsdvd = /usr/bin/lsdvd
mplayer = /root/mplayer
renice = /usr/bin/renice
setterm = /usr/bin/setterm
version = 2.1
xine = /usr/bin/xine


Il est déjà remarquable que la commande "mplayer" est redirigée vers un script perso, placé dans /root. J'y reviendrais plus bas...

Ensuite le local.py.conf :
Code:
###########GENERAL CONF############
CONFIG_VERSION = 5.15
AUDIO_DEVICE        = '/dev/dsp'      # e.g.: /dev/dsp0, /dev/audio, /dev/alsa/?
CONTROL_ALL_AUDIO = 1
ROM_DRIVES =    [('/mnt/cdrom','/dev/hdc','Lecteur CD/DVD')]
ROM_SPEED = 2
HIDE_UNUSABLE_DISCS = 1
USE_NETWORK = 0
CACHE_IMAGES = 1
START_FULLSCREEN_X  = 1
LIRCRC = '/etc/freevo/lircrc'
LOCALE='latin-1'
MEDIAINFO_USE_MEMORY   = 0
CONFIRM_SHUTDOWN    = 0

###########PLUGINS############
plugin.remove('plugin_tv')
plugin.remove('tv.generic_record')
plugin.remove('web.microdom')
plugin.remove('tv')
plugin.remove('tv.mplayer')
plugin.remove('tv.manual_record')
plugin.remove('tv.record_client')
plugin.remove('tv.view_favorites')
plugin.remove('util.marmalade')
plugin.remove('tv.scheduled_recordings')
plugin.remove('record_client')

###########APPLICATIONS############
VIDEO_PREFERED_PLAYER = 'mplayer'
AUDIO_PREFERED_PLAYER = 'mplayer'
MPLAYER_VERSION = "1.0"
MPLAYER_AO_DEV       = 'alsa'  # e.g.: oss,sdl,alsa, see mplayer docs
MPLAYER_NICE         = 0
MPLAYER_VF_INTERLACED  = ''
MPLAYER_VF_PROGRESSIVE = ''
MPLAYER_SET_AUDIO_DELAY = 0
MPLAYER_SOFTWARE_SCALER = ''
MPLAYER_ARGS = { 'dvd'    : '',
                  'vcd'    : '',
                  'cd'     : '',
                  'tv'     : '',
                  'ivtv'   : '',
                  'avi'    : '',
                  'rm'     : '',
                  'rmvb'   : '',
                  'webcam' : '',
                  'default': ''
                  }

##########MENU VIDEOS##############
VIDEO_MPLAYER_SUFFIX = [ 'avi', 'mpg', 'mpeg', 'wmv', 'bin', 'rm',
                          'divx', 'ogm', 'vob', 'asf', 'm2v', 'm2p',
                          'mp4', 'viv', 'nuv', 'mov', 'iso',
                          'nsv', 'mkv' ]
VIDEO_ITEMS = [ ('Disque/Cle USB', '/mnt/usbdisk') ]


##########MENU AUDIO##############
AUDIO_SUFFIX     = [ 'mp3', 'ogg', 'wav','m4a', 'wma', 'aac', 'flac', 'mka' ]
AUDIO_ITEMS = [ ('Disque/Cle USB', '/mnt/usbdisk') ]

##########MENU IMAGES##############
IMAGEVIEWER_BLEND_MODE = 0


##########CONF MENU#############
#OSD_OVERSCAN_X = 150
#OSD_OVERSCAN_Y = 35

OSD_SDL_EXEC_AFTER_STARTUP = "nvtv -t -C CONVERT -r 800,600 -s LARGE; xvattr -a XV_COLORKEY -v 0"
OSD_SDL_EXEC_AFTER_CLOSE = "nvtv -t -C CONVERT -r 800,600 -s LARGE"
OSD_STOP_WHEN_PLAYING = 1


Bcp de choses à remarquer :
le lien vers mon disque externe USB dans audio/video/images
La commande nvtv pour virer les bandes noires sur la télé
Le lien vers le fichier de conf lirc (merci à cet howto !)
Les arguments de mplayer réduits à leur plus simple expression (pas de postprocessing, petit PC oblige)

J'ai aussi modifié le fichier mplayer.py (/usr/lib/python/site-package/freevo/....), de telle sorte à forcer l'inutilisation du postprocessing.
Pour ceux qui comme moi ont une petite config, il est dispo ICI

La config de Xorg afin de lancer tout çà : ICI
On y trouve des options intéressantes, comme par exemple la possibilité de lancer X sans souris

J'en viens à mon script effectuant la jonction entre freevo et mplayer. Je voulais réaliser plusieurs petites choses :
Charger automatiquement les sous-titres nommés <NomDuFilm>.<langue>.sub/srt (j'aime bien les sous-titrages anglais mais des fois j'ai du mal, donc je repasse au français : bref je voulais avoir le choix)
Définir l'option "channels" de mplayer en fonction de la bande son : 6 pour l'AC3, 2 pour les bandes son classiques. En effet mplayer est la fâcheuse habitude de "mutter" automatiquement les sorties WaveREAR et WaveLFE/Center en 6 canaux. Cela fonctionne parfaitement en AC3, mais dans le cas inverse on sort que sur les enceintes Front

Le voici :
Code:
#!/bin/bash
mplay="/usr/bin/mplayer"

while [ $# -ne 1 ]; do               #On recupere les arguments de freevo
   arglist="$arglist $1"
   shift
done

aviarg=$1                  #Nom orginal donne au film par freevo
avifile=${1#/}                  #On eleve le premier slash
movie=${avifile%.*}               #On eleve l'extension

for filename in "$movie"*.srt "$movie"*.sub; do      #On cherche les sub
   if [ -f "$filename" ]; then
      subargs="$subargs"",""$filename"   #Si existant on ajoute à la chaine subargs
   fi
done


surnd=$($mplay -identify -vo null -frames 1 "$avifile"| grep "AC3: 5.1")
if [ "$surnd" = "" ]; then
   nbchannel=2               #Si pas son AC3 channel=2
else
        nbchannel=6               #Sinon channel=6
fi

if [ ! "$subargs" = "" ]; then            #Si il existe des sous-titres
        subargs=${subargs#*","}                         #On retire la derniere virgule genante
   $mplay "$arglist" \
      -channels $nbchannel \
      "$avifile" \
      -sub "$subargs"
else                     #Sinon
        $mplay "$arglist" \
      -channels $nbchannel \
      "$avifile"
fi


J'ai aussi ajouté un ~/.lircrc afin d'avoir des fonctions de mplayer accessibles à la télécommande :
Code:
begin
     button = a
     prog = mplayer
     config = panscan 0.1
     repeat = 1
end
begin
     button = b
     prog = mplayer
     config = panscan -0.1
     repeat = 1
end
begin
     button = media_library
     prog = mplayer
     config = sub_select 1
     repeat = 1
end
begin
     button = vol-down
     prog = mplayer
     config = volume -1
     repeat = 1
end
begin
     button = vol-up
     prog = mplayer
     config = volume 1
     repeat = 1
end
begin
     button = chan-down
     prog = mplayer
     config = seek -20
     repeat = 1
end
begin
     button = chan-up
     prog = mplayer
     config = seek 20
     repeat = 1
end
begin
     button = launch_setup
     prog = mplayer
     config = osd
     #repeat = 1
end


Lirc fonctionnait mal : il fallait parfois plusieurs pressions pour obtenir l'effet désiré, sous mplayer comme sous freevo. Cela est peut-être du au fait que le kernel est compilé en "Preemptible", ou simplement que ma config est faiblarde
J'ai largement amélioré la situation en donnant une haute priorité au process lircd, en modifiant le script d'initialisation :
Code:
#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-misc/lirc/files/lircd,v 1.6 2004/09/26 21:27:07 lanius Exp $

start() {
   ebegin "Starting lircd"
   start-stop-daemon --start --quiet --exec /usr/sbin/lircd -- ${LIRCD_OPTS}
   renice -20 $(pidof lircd) > /dev/null
   eend $?
}

stop() {
   ebegin "Stopping lircd"
   start-stop-daemon --stop --quiet --exec /usr/sbin/lircd
   eend $?
}



Enfin, le tout mettant 3 plombes à booter (pas génial pour l'usage :?), j'ai patché le noyau pour obtenir un software suspend.
Or le driver Nvidia n'aime pas trop çà, la méthode est donc de sortir de freevo préalablement, de suspendre à l'aide du bouton power, le script hibernate se chargeant de redémarrer tout à la restauration :

Code:
UseSuspend2 yes
Reboot no
EnableEscape yes
DefaultConsoleLevel 1
Compressor lzf
Encryptor none
SuspendDevice swap:/dev/hda2
PowerdownMethod 5
ProcSetting expected_compression 50
Verbosity 0
LogFile /var/log/hibernate.log
LogVerbosity 1
SaveClock restore-only
UnmountFSTypes smbfs nfs vfat
UnloadBlacklistedModules yes
LoadModules auto
RestartServices lircd freevo
SwitchToTextMode yes


Pour hiberner grace au bouton "power", j'ai modifié le /etc/acpi/default.sh, et j'ai ajouter au boot acpid grace à rc-update :
Code:
#!/bin/sh
# Default acpi script that takes an entry for all actions

set $*

group=${1/\/*/}
action=${1/*\//}

case "$group" in
        button)
                case "$action" in
                       power)  /usr/sbin/hibernate
                                ;;
                        *)      logger "ACPI action $action is not defined"
                                ;;
                esac
                ;;

        *)
                logger "ACPI group $group / action $action is not defined"
                ;;
esac


Voilà, je suis loin d'avoir fait le tour de la question, mais voila au moins une petite contribution personnelle.
Elle sera j'espère utile pour d'autres désirant se lancer dans cette aventure. Pour ces derniers je suis biensûr dispo pour de plus amples renseignements

Bon, je m'en vais me regarder un p'tit film :lol
Back to top
View user's profile Send private message
chrissou
Guru
Guru


Joined: 22 Mar 2004
Posts: 473

PostPosted: Tue Nov 15, 2005 4:44 pm    Post subject: Reply with quote

j'ai envie de me lancer dans cette aventure aussi par contre je me demandais pourquoi tu avais choisis freevo, as tu testé mythtv ?

Sinon bravo pour le tuto c'est nickel ;)
@+
_________________
MacBookPro 17, OSX 10.6

Mon site oueb : http://www.generationdomotique.com
Back to top
View user's profile Send private message
razer
l33t
l33t


Joined: 08 Oct 2004
Posts: 893
Location: Paris - France

PostPosted: Fri Dec 02, 2005 6:27 pm    Post subject: Reply with quote

chrissou wrote:
j'ai envie de me lancer dans cette aventure aussi par contre je me demandais pourquoi tu avais choisis freevo, as tu testé mythtv ?

Sinon bravo pour le tuto c'est nickel ;)
@+


Merci !
En fait j'ai cherché sur portage et freshmeat ce qui pourrait remplir la fonction désirée, et je suis tombé sur freevo qui semblait pas mal. De plus, il fonctionne en python, langage que je connais un peu, donc je me suis dit que çà faciliterait le tweaking si nécessaire.
Je ne connais pas mythtv, mais je vais me renseigner
Back to top
View user's profile Send private message
chrissou
Guru
Guru


Joined: 22 Mar 2004
Posts: 473

PostPosted: Fri Dec 02, 2005 7:01 pm    Post subject: Reply with quote

Merci @ toi
_________________
MacBookPro 17, OSX 10.6

Mon site oueb : http://www.generationdomotique.com
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum