[LINUX] Ändern und installieren Sie die ReadyMedia-Quelle

Überblick

Ich verwende DLNA seit einigen Jahren mit ReadyMedia auf meinem Raspberry Pi. Ich hatte nach langer Zeit ein Problem und korrigierte die Quelle, also Ich werde einen Artikel aus der Installation schreiben.

einpacken

Bauumgebung (Referenz)

Verfahren

Vorgehensweise (1) Erstellen und installieren Sie ReadyMedia

Vorgehensweise (1-1) Installieren der Bibliothek

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

Wenn es einen Mangel gibt, installieren Sie ihn entsprechend.

Vorgehensweise (1-2) Laden Sie die ReadyMedia-Quelle herunter und extrahieren Sie sie

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

Schritt (1-3) Änderung der ReadyMedia-Quelle

Vorgehensweise (1-3-1) Ändern Sie die Cache-Größe des Albumcovers

Standardmäßig beträgt das Maximum 160 Pixel, wodurch die Anzeige während der Wiedergabe rau wird. Erhöhen Sie das Maximum auf 500px. (Wenn Sie größer sein möchten, machen Sie es größer.)

2 Dateien zu ändern.

shell


vi /usr/local/src/minidlna-1.2.1/albumart.c

Pro 72 Zeilen. Schreiben Sie 160 auf 500 um.

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

Pro 594 Zeilen

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;
}

Prozedur (1-3-2) Ändern Sie die ARTIST-Informationserfassungslogik

Wenn Sie die Standardeinstellung beibehalten und für das Lied ein Albumkünstler festgelegt ist, wird dies priorisiert. In Bezug auf die Logik   [ALBUM ARTIST] > [BAND] > [ARTIST] Es scheint also, dass nur ARTIST-Attribute in der Datenbank verwaltet werden und diejenigen mit hoher Priorität registriert werden.

Ich weiß nicht warum, aber es ist sehr unpraktisch, den Titelkünstler mit dem CD-Künstler zu vernichten, deshalb werde ich nur ARTIST verwenden. In Bezug auf die Verarbeitung wird es nach der Einnahme von [ARTIST] mit [ALBUM ARTIST] oder [BAND] überschrieben Kommentieren Sie den Teil aus, in dem die Informationen überschrieben werden, um den Vorgang zu beenden.

shell


vi /usr/local/src/minidlna-1.2.1/metadata.c

Pro 411 Zeilen. Kommentieren Sie den gesamten Block der if-Anweisung aus.

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;
//		}
//	}
//}

Vorgehensweise (1-4) Erstellen und installieren Sie ReadyMedia

shell


./configure
make -j2
make install

Schritt (1-5) ReadyMedia-Einstellungen

Standardmäßig bezieht sich die Sortierung nicht auf Medienordner. Stellen Sie dies auch ein.

shell


cp /usr/local/src/minidlna-1.2.1/minidlna.conf /etc/
vi /etc/minidlna.conf

/etc/minidlna.conf


#Medienordner einstellen
media_dir=Beliebiger Pfad

#Geben Sie den DLNA-Servernamen ein
friendly_name=Jeder Name

#Spezifikationseinstellungen sortieren. Kommentar
force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title

Vorgehensweise (2) Einstellungen für die Dienstausführung

Schritt (2-1) Erstellen eines Ausführungsbenutzers und Erstellen eines Cache-Ordners

useradd -s /sbin/nologin upnp
mkdir -R /var/cache/minidlna
chown -R upnp:upnp /var/cache/minidlna

Schritt (2-2) Erstellen einer Einheit für den Dienst

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

Schritt (2-3) Aktivieren / Ausführen für den Service

shell


#Dienstaktivierung
systemctl enable minidlna.service
#Servicestart
systemctl start minidlna.service
#Protokollprüfung
journalctl -f -u minidlna.service

Schritt (3) Bestätigung

Wenden Sie sich an den DLNA-Client. (Unter Windows scheint Media Monkey der einzige anständige DLNA-Client zu sein.)

Schritt (9) Bonus

Ändern Sie die Überwachungsgrenze

ReadyMedia verwendet inotify Obwohl es automatisch hinzugefügt wird, wenn eine Änderung im Dateisystem erkannt wird. Stellen Sie bei Bedarf inotify ein.

shell


#Überprüfen Sie die maximale Anzahl von Monitoren pro Benutzer
cat /proc/sys/fs/inotify/max_user_watches

#Ändern Sie die maximale Anzahl von Monitoren pro Benutzer(Temporär)
sysctl fs.inotify.max_user_watches=100000

#Ändern Sie die maximale Anzahl von Monitoren pro Benutzer(permanent)
touch /etc/sysctl.d/90-inotify.conf
vi /etc/sysctl.d/90-inotify.conf

conf:/etc/sysctl.d/90-inotify.conf


#Legen Sie die maximale Anzahl von Monitoren pro Benutzer fest
fs.inotify.max_user_watches = 100000

Impressionen

Ich habe es in den letzten Jahren versucht und mich geirrt, wenn ich drinnen und draußen Heimmedien gehört habe. Ich habe DLNA (ReadyMedia), BubbleUPnP, SubSonic (lms) usw. ausprobiert. ReadyMedia schätzt die Verfügbarkeit von Wiedergabelisten im Dateisystem. Es ist sehr nützlich für die Hintergrundmusik-Wiedergabe auch in Innenräumen.

Außerdem habe ich neulich fast 600 Songs gekauft, also Als ich ihnen zuhörte und darüber nachdachte, mich an die Songtitel zu erinnern, fand ich, dass Informationen zu Anmeldeinformationen ebenfalls sehr wichtig waren. Ich bin froh, dass die Anzeige des Künstlernamens diesmal korrigiert werden konnte. (Weil ich hart arbeite, um die Tags zu organisieren ...)

photo.jpg (Referenz) Amazon Kindle + BubbleUPnP

Beiseite

Nebenbei ① Lesen Sie die Größenänderungslogik langsam

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;
}

Der Ort dieser Korrektur. Ich dachte, dass die Größe nach dem Ändern der Größe durch die Atmosphäre berechnet wurde, Es war schwer zu verstehen und ich gab das Lesen auf. Wenn Sie jedoch langsam darüber nachdenken, ist es immer noch ein wenig interessanter Code.

Wahrscheinlich, weil es keine bestimmte Grundlage für den Koeffizienten gibt, um den Wert zu erhöhen. Wenn ja, wäre es meiner Meinung nach schneller, durch Schichtberechnung als durch Multiplikation zu beschleunigen. Selbst wenn Sie normalerweise keine Brüche verwenden, scheinen Sie eine FPU in Betracht zu ziehen.

python


height' = \frac{height\times 256}{(width \times 256) \div gewünschte Größe}

Nein, es ist eine arithmetische Ebene, also muss ich sie nicht bis zu diesem Punkt aufschlüsseln. Selbst als ich ein i-appli machte, konnte ich keine Brüche wie HP-Messgeräte und Bildlaufleisten verwenden. Ich fühlte mich nostalgisch, weil die Berechnung auf der ganzzahligen Seite üblich war.

Abgesehen von (2) Arithmetik, die den Ausdruck der Größenänderungslogik optimiert

Ich habe das Verhältnis während des Größenänderungsprozesses berechnet. Tatsächlich habe ich die Erfahrung, in der Lage zu sein, eine Ganzzahlarithmetik ohne Verhältnisberechnung durchzuführen, indem zuerst eine Multiplikation durchgeführt wird. Nun, in meinem Fall war es nur ein Dummkopf, also habe ich mehrere Jahre gebraucht, um es zu bemerken (Explosion). (Ich habe nach einem Prozentsatz gesucht ...) Ich habe mich ein wenig bemüht zu berechnen, ob es optimiert werden kann.

python


\begin{align}
height' &= \frac{height \times 256}{(width \times 256) \div gewünschte Größe} \\
&= \frac{height}{width \div gewünschte Größe} \\
&= \frac{height}{width \times \frac{1}{Gewünschte Größe}} \\
&= \frac{height}{width} \times \frac{Gewünschte Größe}{1} \\
&= (height \div width) \mal gewünschte Größe\\
&= height \mal gewünschte Größe\div width \\
\end{align}

Deshalb

python


height' = height \mal gewünschte Größe\div width \\

Kannst du gehen : Denken: Lass uns nachsehen! SS.png Ich habe es mit Excel überprüft, aber es sieht in Ordnung aus. (Überprüfen Sie an dem Punkt, an dem das Defizit berechnet wird, den Betrag anhand des Fehlers des Ass-Verhältnisses vor und nach der Größenänderung.) Es besteht die Gefahr, dass Ziffern überlaufen, aber manchmal wird die Formel einfach Unter diesen Einschränkungen kann eine Überprüfung der Berechnungsformel erfolgen.

Referenz (danke)

Recommended Posts

Ändern und installieren Sie die ReadyMedia-Quelle
Installieren Sie pyenv und pyenv-virtualenv
Installieren Sie Python und Flask (Windows 10)
Installieren Sie Python 3.7 und Django 3.0 (CentOS)
Installieren Sie Pyethapp und erstellen Sie ein Konto
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Installieren Sie Mecab und mecab-python3 unter Ubuntu 14.04
So installieren und verwenden Sie Tesseract-OCR
Installieren Sie Dropbox und führen Sie es unter Ubuntu 20.04 aus
Installieren Sie OpenCV und Chainer unter Ubuntu
Installieren Sie CUDA 8.0 und Chainer unter Ubuntu 16.04
Erstellen und installieren Sie OpenCV unter Windows
So installieren und konfigurieren Sie Amsel
So installieren und verwenden Sie Graphviz
Installieren Sie Fabric unter Ubuntu und versuchen Sie es
Kompilieren und installieren Sie Git aus dem Quellcode.
Ansible Playbook zum Installieren und Konfigurieren von `pyenv`
Installieren Sie easy_install und pip unter Windows
Bis matplotlib installiert ist und ausgeführt wird