Seite 5 von 5
Re: SHOUTcast -Simpleplayer
Verfasst: Di 19. Feb 2019, 18:39
von flk
Das müsste man doch hier erledigen können ... also statt dem print Befehl. Den hatte ich nur zum Testen drin
function change_picture()
--print("Code zum Bild wechseln")
end
Re: SHOUTcast -Simpleplayer
Verfasst: Di 19. Feb 2019, 18:42
von BPanther
Stop war bei meinen Tests nicht nötig, läuft einfach durch. Aber kann sicherlich nicht schaden, da ich nicht weiß, ob es vielleicht den RAM dann zumüllt wenn das nicht vorher gestoppt wird.
Re: SHOUTcast -Simpleplayer
Verfasst: Di 19. Feb 2019, 23:22
von fritz
Testversion 3 des ARD-radionet-Players
ard_radionet_test2.zip
Re: SHOUTcast -Simpleplayer
Verfasst: Di 19. Feb 2019, 23:38
von BPanther
Wie Du es wolltest...

Re: SHOUTcast -Simpleplayer
Verfasst: Do 21. Feb 2019, 08:01
von flk
Ich habe die Sache mit dem posix.fork() noch ein bisschen weiter verfolgt. Meine Erkenntnis ist, dass wir da nichts bei der Verwendung falsch gemacht haben, sondern, dass es so schlicht nicht funktionieren kann. Das Problem besteht darin, dass mit posix.fork ein komplett neuer Prozess gestartet wird. Dieser hat dann keinen Zugriff auf die Ressourcen des ursprünglichen lua Scripts. Das läuft solange einwandfrei, wie nur auf Systemressourcen zugegriffen wird. Man kann z.B. problemlos print in die Konsole absetzen oder z.B flag files anlegen lassen. Sobald man aber vom Kindprozess aus auf Neutrino Api Funktionen zugreifen will, bekommt man einen Ressource busy Fehler.
Man müsste das also von Neutrino aus lösen. Wenn man eine allgemeingültige Lösung will eine Threading Funktion für die Lua Api bereitstellen, die intern dann openthreads nutzt oder ansonsten eine Anbindung schaffen, damit man von Lua aus den Bildbetrachter einbinden kann. Klingt beides nach schwierigen Aufgaben

Re: SHOUTcast -Simpleplayer
Verfasst: Fr 22. Feb 2019, 14:43
von udog
Hallo in die Runde
Ich hatte mir nochmal Gedanken gemacht wegen dem Picture Viewer während der Shoutcast wiedergabe
Hatte doch noch das Lua Bootlogowechselplugin angeschaut damit funktioniert das ganze zumindest händig (ohne Diashow)
Vorraussetzung ist man legt das auf die rote Taste.
-man braucht Bilder die in einem Ordner zusammen mit einer xml Datei auf einen Server kommen.... bei mir heißt die boot.xml (nur einfache testbilder mal genutzt )
mit folgenden Inhalt
zb. so
boot.xml
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<bild>Bild1.jpg</bild>
<bild>Bild2.jpg</bild>
<bild>Bild3.jpg</bild>
<bild>Bild4.jpg</bild>
<bild>Bild5.jpg</bild>
<bild>Bild6.jpg</bild>
<bild>Bild7.jpg</bild>
<bild>Bild8.jpg</bild>
<bild>Bild9.jpg</bild>
die komplette Lua sieht so aus, kann aber noch gekürzt werden da wir ja einiges nicht brauchen.
Code: Alles auswählen
--logo LUA Plugin.
--udog
--2014
--Objekte
function init()
server = 'http://Udogxxxxxxxx/xxxx/mein Ordner/'; --hier Sever anpassen
xmldatei = 'boot.xml'; --name der xml anpassen
pictures = {};
maxPicture = 0;
pictureNumber = 0;
n = neutrino();
end
-- Xml mit Bildernamen auslesen und Array speichern.
function getPictures()
local fname = "/tmp/tmp_pictures.xml";
os.execute("wget -q -O " .. fname .. " '" .. server .. xmldatei .. "'" );
local fp = io.open(fname, "r")
if fp == nil then
print("Error opening file '" .. fname .. "'.")
os.exit(1)
else
local s = fp:read("*a")
fp:close()
i = 1;
for picture in string.gmatch(s, "<bild>(.-)</bild>") do
pictures[i] = picture;
i = i + 1;
end
maxPicture = i - 1;
pictureNumber = 1;
if pictures[1] ~= nil then
getPicture();
end
end
end
--herunterladen des Bildes
function getPicture()
local fname = "/tmp/tmp_bootpicture.jpg"
os.execute("wget -q -U Mozilla -O " .. fname .. " '" .. server .. pictures[pictureNumber] .. "'");
showPicture();
end
--Anzeigen der Bilder
function showPicture()
oldPictureNumber = pictureNumber;
local spacer = 8;
local x = 180;
local y = 70;
local dx = 900;
local dy = 590;
w = cwindow.new{x=x, y=y, dx=dx, dy=dy, title="Picture Viewer", btnRed="Zurück", btnGreen="Vor", btnYellow="Diashow"};
w:paint();
n:DisplayImage("/tmp/tmp_bootpicture.jpg", 220, 130, 800, 450)
neutrinoExec();
CloseNeutrino()
if oldPictureNumber ~= pictureNumber then
getPicture();
end
end
--Fenster anzeigen und auf Tasteneingaben reagieren
function neutrinoExec()
repeat
msg, data = n:GetInput(500)
-- Taste Rot zeigt das vorherige Bild an
if (msg == RC['left'] or msg == RC['page_left']) then
if pictureNumber == 1 then
pictureNumber = maxPicture
else
pictureNumber = pictureNumber - 1;
end
msg = RC['home'];
-- Taste Grün zeigt den Text wieder an
elseif (msg == RC['right'] or msg == RC['page_right']) then
if pictureNumber == maxPicture then
pictureNumber = 1;
else
pictureNumber = pictureNumber + 1;
end
msg = RC['home'];
-- Taste Gelb speichert das Bootlogo
elseif (msg == RC['yellow']) then
getBootlogo(pictureNumber);
end
-- Taste Exit oder Menü beendet das Fenster
until msg == RC['home'] or msg == RC['setup'];
end
--Fenster schließen
function CloseNeutrino()
w = nil
collectgarbage();
end
--[[
MAIN
]]
init();
getPictures();
os.execute("rm /tmp/tmp_boot*.*");
wer sich auskennt könnte den Rahmen noch schmaler machen und die Diashow integrieren.
Die Adresse der Bilddateien kann vielleicht auch ein Stick an der Box oder ein dafür gemountetes Verzeichniss sein.
soll nur mal zum testen sein...siehe video
Videotest
Bildwechsler.rar
hier darf gebastelt werden

Re: SHOUTcast -Simpleplayer
Verfasst: Fr 22. Feb 2019, 15:16
von BPanther
Vergiss dabei nicht, daß es nicht um den wechsel ansich geht, den habe ich ja eingebaut gehabt. Es geht ja darum, daß mehrere unterschiedliche Dinge gleichzeitig abgearbeitet werden sollen. Der Logowechsler macht ja nur im Grunde die eine Sache. Logo ändern, dann auf Tastendruck warten, also in Reihenfolge. In dem Moment wenn was abgespielt wird (Inet-Radio), wird das lua an der Stelle angehalten und gewartet, bis das abspielen wieder angehalten wird, die Kontrolle hat dann der Player übernommen. Erst wenn das abspielen gestoppt wird und der Player somit beendet wird, wird das lua weiter abgearbeitet.