J'utilise DLNA depuis quelques années avec ReadyMedia installé sur mon Raspberry Pi. J'ai eu un problème après un long moment et j'ai corrigé la source, donc J'écrirai un article de l'installation.
shell
# libjpeg-turbo
yum list libjpeg-turbo libjpeg-turbo-devel libjpeg-turbo-static libjpeg-turbo-utils
yum install libjpeg-turbo libjpeg-turbo-devel libjpeg-turbo-static libjpeg-turbo-utils
# sqlite3
yum list sqlite-devel
yum install sqlite-devel
# libexif
yum list libexif libexif-devel libexif-doc
yum install libexif libexif-devel libexif-doc
# libid3tag
yum list libid3tag libid3tag-devel
yum install libid3tag libid3tag-devel
#flac
yum list flac flac-devel flac-libs
yum install flac flac-devel flac-libs
De plus, s'il y a une pénurie, installez-le comme il convient.
shell
cd /usr/local/src
wget http://jaist.dl.sourceforge.net/project/minidlna/minidlna/1.2.1/minidlna-1.2.1.tar.gz
tar zxvf minidlna-1.2.1.tar.gz
cd minidlna-1.2.1
Par défaut, le maximum est de 160 pixels, ce qui rend l'affichage rugueux pendant la lecture. Augmentez le maximum à 500px. (Si vous voulez être plus grand, agrandissez-le.)
2 fichiers à modifier.
shell
vi /usr/local/src/minidlna-1.2.1/albumart.c
Par 72 lignes. Réécrivez 160 à 500.
albumart.c
if( imsrc->width > imsrc->height )
{
# dstw = 160;
dstw = 500;
# dsth = (imsrc->height<<8) / ((imsrc->width<<8)/160);
dsth = (imsrc->height<<8) / ((imsrc->width<<8)/500);
}
else
{
# dstw = (imsrc->width<<8) / ((imsrc->height<<8)/160);
dstw = (imsrc->width<<8) / ((imsrc->height<<8)/500);
# dsth = 160;
dsth = 500;
}
shell
vi /usr/local/src/minidlna-1.2.1/metadata.c
Par 594 lignes
metadata.c
if( ed->size )
{
/* We might need to verify that the thumbnail is 160x160 or smaller */
if( ed->size > 12000 )
{
imsrc = image_new_from_jpeg(NULL, 0, ed->data, ed->size, 1, ROTATE_NONE);
if( imsrc )
{
#if( (imsrc->width <= 160) && (imsrc->height <= 160) )
if( (imsrc->width <= 500) && (imsrc->height <= 500) )
thumb = 1;
image_free(imsrc);
}
}
else
thumb = 1;
}
Si vous conservez la valeur par défaut, si la chanson a un ensemble d'artistes d'album, celui-ci sera prioritaire. En termes de logique [ALBUM ARTIST] > [BAND] > [ARTIST] Ainsi, il semble que seuls les attributs ARTIST sont gérés dans la base de données, et ceux qui ont une priorité élevée sont enregistrés.
Je ne sais pas pourquoi, mais c'est très gênant d'écraser l'artiste du morceau avec l'artiste du CD, donc je n'utiliserai qu'ARTIST. En termes de traitement, après avoir pris [ARTIST], il est écrasé par [ALBUM ARTIST] ou [BAND], donc Mettez en commentaire la partie où les informations sont écrasées pour éliminer le processus.
shell
vi /usr/local/src/minidlna-1.2.1/metadata.c
Par 411 lignes. Commentez le bloc entier de l'instruction if.
metadata.c
/* If there is a album artist or band associated with the album,
use it for virtual containers. */
//if( i < ROLE_ALBUMARTIST )
//{
// for( i = ROLE_ALBUMARTIST; i <= ROLE_BAND; i++ )
// {
// if( song.contributor[i] && *song.contributor[i] )
// break;
// }
// if( i <= ROLE_BAND )
// {
// m.artist = trim(song.contributor[i]);
// if( strlen(m.artist) > 48 )
// {
// m.artist = strdup("Various Artists");
// free_flags |= FLAG_ARTIST;
// }
// else if( (esc_tag = escape_tag(m.artist, 0)) )
// {
// m.artist = esc_tag;
// free_flags |= FLAG_ARTIST;
// }
// }
//}
shell
./configure
make -j2
make install
Par défaut, le tri n'est pas lié aux dossiers multimédias, définissez-le également.
shell
cp /usr/local/src/minidlna-1.2.1/minidlna.conf /etc/
vi /etc/minidlna.conf
/etc/minidlna.conf
#Définir le dossier multimédia
media_dir=Chemin arbitraire
#Entrez le nom du serveur DLNA
friendly_name=N'importe quel nom
#Trier les paramètres de spécification. Décommenter
force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title
useradd -s /sbin/nologin upnp
mkdir -R /var/cache/minidlna
chown -R upnp:upnp /var/cache/minidlna
shell
touch /etc/systemd/system/minidlna.service
vi /etc/systemd/system/minidlna.service
/etc/systemd/system/minidlna.service
[Unit]
Description=minidlna server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=simple
User=upnp
Group=upnp
Restart=always
RestartSec=10
ExecStart=/usr/local/sbin/minidlnad -R -d -f /etc/minidlna.conf
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
shell
#Activation du service
systemctl enable minidlna.service
#Début du service
systemctl start minidlna.service
#Vérification du journal
journalctl -f -u minidlna.service
Vérifiez auprès du client DLNA. (Sous Windows, le seul client DLNA décent semble être Media Monkey.)
ReadyMedia utilise inotify Bien qu'il soit automatiquement ajouté lorsqu'une modification du système de fichiers est détectée. Réglez inotify si nécessaire.
shell
#Vérifiez le nombre maximum de moniteurs par utilisateur
cat /proc/sys/fs/inotify/max_user_watches
#Modifier le nombre maximum de moniteurs par utilisateur(Temporaire)
sysctl fs.inotify.max_user_watches=100000
#Modifier le nombre maximum de moniteurs par utilisateur(permanent)
touch /etc/sysctl.d/90-inotify.conf
vi /etc/sysctl.d/90-inotify.conf
conf:/etc/sysctl.d/90-inotify.conf
#Définir le nombre maximum de moniteurs par utilisateur
fs.inotify.max_user_watches = 100000
J'essaye et me trompe depuis quelques années en écoutant des médias domestiques à l'intérieur et à l'extérieur. J'ai essayé DLNA (ReadyMedia), BubbleUPnP, SubSonic (lms), etc. ReadyMedia apprécie la disponibilité des listes de lecture placées sur le système de fichiers. C'est très utile pour la lecture BGM même à l'intérieur.
Aussi, j'ai acheté près de 600 chansons l'autre jour, donc Quand je les ai écoutés et que j'ai pensé à me souvenir des titres des chansons, j'ai pensé que les informations d'identification étaient également très importantes. Je suis content que l'affichage du nom de l'artiste puisse être corrigé cette fois. (Parce que je travaille dur pour organiser les balises ...)
(Référence) Amazon Kindle + BubbleUPnP
metadata.c
if( imsrc->width > imsrc->height )
{
dstw = 160;
dsth = (imsrc->height<<8) / ((imsrc->width<<8)/160);
}
else
{
dstw = (imsrc->width<<8) / ((imsrc->height<<8)/160);
dsth = 160;
}
Le lieu de cette correction. Je pensais que la taille après redimensionnement était calculée par l'atmosphère, C'était difficile à comprendre et j'ai abandonné la lecture. Cependant, si vous y réfléchissez lentement, cela reste un peu de code intéressant.
Probablement parce qu'il n'y a pas de base particulière pour que le coefficient augmente la valeur. Si c'est le cas, je pense qu'il serait plus rapide d'accélérer par le calcul des équipes plutôt que par la multiplication. Même si vous n'utilisez normalement pas de fractions, il semble que vous envisagez FPU.
python
height' = \frac{height\times 256}{(width \times 256) \div taille désirée}
Non, c'est un niveau arithmétique, donc je n'ai pas à le décomposer jusqu'à ce point. Même lorsque je faisais une i-appli, je ne pouvais pas utiliser de fractions, telles que les jauges HP et les barres de défilement. Je me sentais nostalgique car le calcul du côté entier était courant.
J'avais l'habitude de calculer le ratio pendant le processus de redimensionnement, En fait, j'ai l'expérience de pouvoir effectuer de l'arithmétique entière sans calcul de rapport en faisant d'abord la multiplication. Eh bien, dans mon cas, c'était juste un imbécile, donc il m'a fallu plusieurs années pour le remarquer (explosion). (Je cherchais un pourcentage ...) J'ai essayé un peu dur de calculer s'il pouvait être optimisé.
python
\begin{align}
height' &= \frac{height \times 256}{(width \times 256) \div taille désirée} \\
&= \frac{height}{width \div taille désirée} \\
&= \frac{height}{width \times \frac{1}{Taille souhaitée}} \\
&= \frac{height}{width} \times \frac{Taille souhaitée}{1} \\
&= (height \div width) \fois la taille désirée\\
&= height \fois la taille désirée\div width \\
\end{align}
Voilà pourquoi
python
height' = height \fois la taille désirée\div width \\
Peux tu aller : en pensant: Allons vérifier! Je l'ai vérifié avec Excel, mais cela semble correct. (Au point où le déficit est calculé, vérifiez le montant par l'erreur du ratio ass avant et après le redimensionnement.) Il y a un risque de débordement de chiffres, mais parfois la formule devient simple, alors Il peut y avoir une révision de la formule de calcul sous ces restrictions.
Recommended Posts