Page 2 sur 2

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

Posté : lun. 19 août 2019 07:55
par lhebui
Pour une fois que j'avais un peu de temps ...

De plus, le programmeur de mpd n'a pas mis de commentaires dans son code, par contre, il est très bien structuré avec des noms de variables compréhensifs.

Avec un peu de recherche, cela a été relativement facile pour moi ... Et surtout une bonne expérience ;-)

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

Posté : lun. 14 oct. 2019 21:08
par Valentin44
lhebui a écrit :
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 },
	[url=http://www.rachat-de-credit-simulation.com/simulation] Simulation de rachat de crédit [/url]
	{ "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 ...
Coucou tout le monde. Merci d’exposer cela avec nous, je trouve cela vraiment intéressant ! Toutefois, un détail me trottine un peu, je voudrai vous l’exposer si c’est possible. Merci de votre retour  Bonne continuation à tous Amicalement