View previous topic :: View next topic |
Author |
Message |
razer l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
Joined: 08 Oct 2004 Posts: 893 Location: Paris - France
|
Posted: Tue Oct 04, 2005 3:23 pm Post subject: [HOWTO] "Gentoo media box" sous XOrg |
|
|
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 :
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 |
|
![](templates/gentoo/images/spacer.gif) |
chrissou Guru
![Guru Guru](/images/ranks/rank_rect_3.gif)
Joined: 22 Mar 2004 Posts: 473
|
Posted: Tue Nov 15, 2005 4:44 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
razer l33t
![l33t l33t](/images/ranks/rank_rect_4.gif)
Joined: 08 Oct 2004 Posts: 893 Location: Paris - France
|
Posted: Fri Dec 02, 2005 6:27 pm Post subject: |
|
|
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 |
|
![](templates/gentoo/images/spacer.gif) |
chrissou Guru
![Guru Guru](/images/ranks/rank_rect_3.gif)
Joined: 22 Mar 2004 Posts: 473
|
|
Back to top |
|
![](templates/gentoo/images/spacer.gif) |
|
|
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
|
|