[résolu] mpd, errno: Failed to read: Input/output error

Votre Apache se cache, votre Pi gémit, votre SoC fume ? La panne quoi ! C'est ici que vous trouverez sans doute une solution... Sinon du réconfort :)

Modérateurs : Francois, maxty01

lhebui
Messages : 65
Enregistré le : mer. 2 mars 2016 10:42
Localisation : Eure & Loir

[résolu] mpd, errno: Failed to read: Input/output error

Message par lhebui » jeu. 15 août 2019 09:49

Bonjour,
Sur mon Pi3+, j'ai un serveur mpd. Le DD contenant est connecté à la freebox. La freebox est connecté à un switch gigabit est le Pi3+ est connecté en filaire à ce même switch gigabit.
Le montage du DD relié à la freebox sur le PI3+ est réalisé avec curl :

Code : Tout sélectionner

curlftpfs#freebox:selmer@mafreebox.freebox.fr/svgde_generale/musique/   /media/musique  fuse    _netdev,allow_other,rw,auto,user        0       2
Quand je demande à Ario de lire un morceau de musique, pas de pb mais pendant la lecture du morceau (au début, à la fin ou n'importe où d'ailleurs ...), il passe au morceau suivant.
Quand je regarde le log de mpd, je trouve cette erreur à chaque fois qu'il change de morceau :

Code : Tout sélectionner

Aug 15 09:26 : client: [17] opened from 192.168.1.84:58948
Aug 15 09:30 : player: played "Al Jarreau/We Got By/01 - Al Jarreau - Spirit.fl$
Aug 15 09:33 : errno: Failed to read: Input/output error
Aug 15 09:33 : flac: FLAC__STREAM_DECODER_ABORTED
Aug 15 09:34 : player: played "Al Jarreau/We Got By/02 - Al Jarreau - We Got By$
Aug 15 09:35 : errno: Failed to read: Input/output error
Aug 15 09:35 : flac: FLAC__STREAM_DECODER_ABORTED
Aug 15 09:35 : player: played "Al Jarreau/We Got By/03 - Al Jarreau - Susan's S$
Il n'arrive pas à lire ...

Quelque fois, je n'ai pas du tout de pb de lecture, et plus souvent, ça n'arrête pas ...

Une idée ???
Modifié en dernier par lhebui le sam. 17 août 2019 10:37, modifié 1 fois.

lhebui
Messages : 65
Enregistré le : mer. 2 mars 2016 10:42
Localisation : Eure & Loir

Re: mpd, errno: Failed to read: Input/output error

Message par lhebui » jeu. 15 août 2019 10:51

Une solution possible serait de créer un tampon ...

J'ai rajouté dans mpd.conf ces lignes :

Code : Tout sélectionner

# MPD Internal Buffering ######################################################
#
# This setting adjusts the size of internal decoded audio buffering. Changing
# this may have undesired effects. Don't change this if you don't know what you
# are doing.
#
audio_buffer_size               "4096"
#
# This setting controls the percentage of the buffer which is filled before
# beginning to play. Increasing this reduces the chance of audio file skipping,
# at the cost of increased time prior to audio playback.
#
buffer_before_play              "20%"
#
###############################################################################

# Resource Limitations ########################################################
#
# These settings are various limitations to prevent MPD from using too many
# resources. Generally, these settings should be minimized to prevent security
# risks, depending on the operating resources.
#
#connection_timeout             "60"
#max_connections                "10"
#max_playlist_length            "16384"
#max_command_list_size          "2048"
#max_output_buffer_size         "8192"
#
###############################################################################
J'ai doublé la taille du buffer audio par rapport à la valeur par défaut mais toujours le même pb ....

lhebui
Messages : 65
Enregistré le : mer. 2 mars 2016 10:42
Localisation : Eure & Loir

Re: mpd, errno: Failed to read: Input/output error

Message par lhebui » jeu. 15 août 2019 12:36

Les lignes que j'ai rajouté dans le post juste au-dessus sont issues d'un vieil exemple de mpd.conf ... Peut-être que ces paramètres ne sont plus reconnus.

Par contre sur le site officiel de MPD, j'ai trouvé un paramètre qui n'est pas par défaut dans mpd.conf mais que je peux rajouter ... :

Code : Tout sélectionner

###############################################################################
#
# Buffer d'entrée

input_cache {
    size "1 GB"
}

###############################################################################
J'essaie et je retourne le résultat sur ce fil ....

Site officiel : https://www.musicpd.org/doc/html/user.html

lhebui
Messages : 65
Enregistré le : mer. 2 mars 2016 10:42
Localisation : Eure & Loir

Re: mpd, errno: Failed to read: Input/output error

Message par lhebui » jeu. 15 août 2019 14:35

Il n'aime pas du tout ce nouveau paramètre qui pourtant est décrit sur le site de mpd :

Code : Tout sélectionner

sudo systemctl restart mpd.service
sudo systemctl status mpd.service
● mpd.service - Music Player Daemon
   Loaded: loaded (/lib/systemd/system/mpd.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2019-08-15 12:43:59 CEST; 1s ago
     Docs: man:mpd(1)
           man:mpd.conf(5)
           file:///usr/share/doc/mpd/user-manual.html
  Process: 1912 ExecStart=/usr/bin/mpd --no-daemon $MPDCONF (code=exited, status=1/FAILURE)
 Main PID: 1912 (code=exited, status=1/FAILURE)

août 15 12:43:58 raspberrypi systemd[1]: Started Music Player Daemon.
août 15 12:43:59 raspberrypi mpd[1912]: config_file: unrecognized parameter in config file at line 384: input_cache
août 15 12:43:59 raspberrypi systemd[1]: mpd.service: Main process exited, code=exited, status=1/FAILURE
août 15 12:43:59 raspberrypi systemd[1]: mpd.service: Unit entered failed state.
août 15 12:43:59 raspberrypi systemd[1]: mpd.service: Failed with result 'exit-code'.

lhebui
Messages : 65
Enregistré le : mer. 2 mars 2016 10:42
Localisation : Eure & Loir

Re: mpd, errno: Failed to read: Input/output error

Message par lhebui » jeu. 15 août 2019 17:39

Pour l'instant :

1- la commande audio_buffer_size ne génère pas d'erreur mais n'a pas d'eefet
2- la commande input_cache est documenté sur le site officiel de mpd mais n'est pas reconnu avec la version 0.19. Je pense que cette commande est antérieure à la version 0.19
3- pour compiler la dernière version (0.22), il faut que Meson soit en version mini 0.49 et je ne peux installer que la version 0.37 ...

Comment puis-je upgrader mon debian (Linux raspberrypi 4.19.58-v7+ #1245 SMP Fri Jul 12 17:25:51 BST 2019 armv7l GNU/Linux)pour pouvoir après installer mpd dans sa dernière version ?

lhebui
Messages : 65
Enregistré le : mer. 2 mars 2016 10:42
Localisation : Eure & Loir

Re: mpd, errno: Failed to read: Input/output error

Message par lhebui » ven. 16 août 2019 17:43

Voici mes avancées sur le sujet.

Etant donné que je ne peux pas installer la dernière version pour pouvoir utiliser "input_cache" car la compilation réclame des paquets avec des versions auxquelles je n'ai pas accès,
étant donné que le paramètre "buffer_size" n'a pas d'effet,
étant donné que dans le fichier de paramétrage /etc/mpd.conf aucun paramètre ne définie la taille du buffer d'entrée et
étant donné que je suis sûr que la version 0.19 a un buffer d'entrée, je décide donc de chercher dans le code source de la version 0.19.

1/ Je télécharge sur mon pc la version de mon mpd 0.19 que nous retrouvons sur le site officiel mpd : https://www.musicpd.org/download/mpd/0.19/ avec cette commande :

Code : Tout sélectionner

wget https://www.musicpd.org/download/mpd/0.19/mpd-0.19.21.tar.gz
puis je le décompresse.

2/ je cherche dans le fichier /etc/mpd.conf un paramètre assez explicite et long pour faire une recherche de texte avec searchmonkey dans le répertoire décompressé. Je choisis "gapless_mp3_playback" par exemple ...
Je trouve plusieurs fichiers contenant ce terme (5) mais je veux connaître le fichier qui contient tous les paramètres : mpd-0.19.21/src/config/ConfigTemplates.cxx

Je trouve cette liste intéressante :

Code : Tout sélectionner

const ConfigTemplate config_templates[] = {
	{ "music_directory", false, false },
	{ "playlist_directory", false, false },
	{ "follow_inside_symlinks", false, false },
	{ "follow_outside_symlinks", false, false },
	{ "db_file", false, false },
	{ "sticker_file", false, false },
	{ "log_file", false, false },
	{ "pid_file", false, false },
	{ "state_file", false, false },
	{ "state_file_interval", false, false },
	{ "restore_paused", false, false },
	{ "user", false, false },
	{ "group", false, false },
	{ "bind_to_address", true, false },
	{ "port", false, false },
	{ "log_level", false, false },
	{ "zeroconf_name", false, false },
	{ "zeroconf_enabled", false, false },
	{ "password", true, false },
	{ "default_permissions", false, false },
	{ "audio_output", true, true },
	{ "audio_output_format", false, false },
	{ "mixer_type", false, false },
	{ "replaygain", false, false },
	{ "replaygain_preamp", false, false },
	{ "replaygain_missing_preamp", false, false },
	{ "replaygain_limit", false, false },
	{ "volume_normalization", false, false },
	{ "samplerate_converter", false, false },
	{ "audio_buffer_size", false, false },
	{ "buffer_before_play", false, false },
	{ "http_proxy_host", false, false },
	{ "http_proxy_port", false, false },
	{ "http_proxy_user", false, false },
	{ "http_proxy_password", false, false },
	{ "connection_timeout", false, false },
	{ "max_connections", false, false },
	{ "max_playlist_length", false, false },
	{ "max_command_list_size", false, false },
	{ "max_output_buffer_size", false, false },
	{ "filesystem_charset", false, false },
	{ "id3v1_encoding", false, false },
	{ "metadata_to_use", false, false },
	{ "save_absolute_paths_in_playlists", false, false },
	{ "decoder", true, true },
	{ "input", true, true },
	{ "gapless_mp3_playback", false, false },
	{ "playlist_plugin", true, true },
	{ "auto_update", false, false },
	{ "auto_update_depth", false, false },
	{ "despotify_user", false, false },
	{ "despotify_password", false, false},
	{ "despotify_high_bitrate", false, false },
	{ "filter", true, true },
	{ "database", false, true },
	{ "neighbors", true, true },
};
3/ Dans ces paramètres, je trouve un paramètre qui semble correspondre à ce que je cherche, c.a.d. un buffer audio d'entrée : "audio_buffer_size"

4/ Je fais une recherche avec "audio_buffer_size" et je trouve 5 fichiers dont le main.cxx

Code : Tout sélectionner

static void
initialize_decoder_and_player(void)
{
	const struct config_param *param;

	size_t buffer_size;
	param = config_get_param(CONF_AUDIO_BUFFER_SIZE);
	if (param != nullptr) {
		char *test;
		long tmp = strtol(param->value.c_str(), &test, 10);
		if (*test != '\0' || tmp <= 0 || tmp == LONG_MAX)
			FormatFatalError("buffer size \"%s\" is not a "
					 "positive integer, line %i",
					 param->value.c_str(), param->line);
		buffer_size = tmp;
	} else
		buffer_size = DEFAULT_BUFFER_SIZE;

	buffer_size *= 1024;
Et je peux lire que si il n'y a pas de valeur définie, le buffer_size = DEFAULT_BUFFER_SIZE

Plus haut dans le fichier :

Code : Tout sélectionner

static constexpr unsigned DEFAULT_BUFFER_SIZE = 4096;
5/ Je rentre un nouveau paramètre dans le fichier /etc/mpd.conf avec le paramètre suivant :

Code : Tout sélectionner

audio_buffer_size "16384"
soit 4 fois la taille initiale du buffer ...

6/ essai avec 9 heures de musique et après je regarde le fichier /var/log/mpd/mpd.log pour compter le nombre d'erreurs en lecture/écriture ....

C'est encours ...

lhebui
Messages : 65
Enregistré le : mer. 2 mars 2016 10:42
Localisation : Eure & Loir

Re: mpd, errno: Failed to read: Input/output error

Message par lhebui » sam. 17 août 2019 09:19

Ca a tourné cette nuit : pas vu d'erreurs d'entré/sortie dans le fichier log pendant ces 9 heures.

Je viens de recharger une autre liste que j'écoute en même temps et je vais charger le Pi3+ avec Firefox avec des animations flash pour voir la réaction ...

lhebui
Messages : 65
Enregistré le : mer. 2 mars 2016 10:42
Localisation : Eure & Loir

Re: mpd, errno: Failed to read: Input/output error

Message par lhebui » sam. 17 août 2019 10:36

Cela fait maintenant plus de 90 minutes que mpd lit de la musique sans saccade et aucune erreur d'entrée/sortie dans le fichier log.
Pendant cette lecture, j'ai chargé le PI3+ à 60% avec firefox qui tourne avec des videos youtube qui va lire sur le net à travers la freebox où est relié le DD qui contient le répertoire de la musique que pointe mpd.

Je considère donc que le paramètre

Code : Tout sélectionner

audio_buffer_size "16384"
est bien celui qui définit la taille du buffer d'entrée audio et la valeur que j'ai mis suffit à supprimer les erreurs d'entrée/sortie.

Résolu ???

Je pense que oui ...

domi
Administrateur
Messages : 3230
Enregistré le : mer. 17 sept. 2014 18:12
Localisation : Seine et Marne

Re: [résolu] mpd, errno: Failed to read: Input/output error

Message par domi » sam. 17 août 2019 17:38

Bonjour et merci pour l'info.
Ne faisant pas de musique avec le Rpi, je ne pouvais t’orienter, mais par curiosité je suivais quand même ce sujet de près. ;)
Passionné de Raspberry, Arduino, ESP8266, ESP32, et objets connectés :
Spécial débutant, concevez vous-même votre domotique DIY : https://www.youtube.com/c/DomoticDIY
Conception d'une station météo DIY, et envoi des infos à votre Domotique.

Artemus24
Raspinaute
Messages : 1077
Enregistré le : ven. 15 sept. 2017 19:15

Re: [résolu] mpd, errno: Failed to read: Input/output error

Message par Artemus24 » sam. 17 août 2019 23:07

Salut à tous.

Moi de même, j'ai suivi avec attention ce sujet. :)
Merci pour l'information !

@+
RPI4B/8GB + Argon FanHAt
Rpi3A+, Rpi3B+
RPi 2B + Joy-It I2C Serial 20x4 2004 LCD Module
RPi 2B + PIM273 Unicorn HAT HD 16x16 Leds RGB
RPi0v1.3, RPi0W + LibreElec/Kodi, Rpi0WH + Tuner TV HAT
NodeMCU ESP32

Répondre

Retourner vers « En panne ? »