Notice: This forum has been recovered from an old backup, so some content, links, and dates may be outdated. The forum is currently read-only while we restore sign-in and registration functionality. Details

If you find this forum valuable and would like to help keep it online, donations to help cover hosting and domain costs are greatly appreciated, but never expected. You can support the forum through Buy Me a Coffee or Ko-fi. Thank you for helping preserve the EventGhost community.

Bildformat einer DVD in ZP auslesen

Allgemeines zum Thema EventGhost
ze_sniper1
Posts: 29
Joined: Sat Aug 19, 2006 2:50 pm

Bildformat einer DVD in ZP auslesen

Post by ze_sniper1 »

Hallo!

Der Zoomplayer sendet ja ständig Statuscodes per TCP an EG
Kann man da auch irgendwie das Bildformat auslesen, damit ich meine
Maskierung automatisiert anfahren kann?

ze_sniper1
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

DvdArFullFrame
DvdArLetterbox
DvdArAnamorphic
ze_sniper1
Posts: 29
Joined: Sat Aug 19, 2006 2:50 pm

Post by ze_sniper1 »

Hab jetzt etwas damit herum gespielt.

DvdArAnamorphic gibt Zoomplayer aber immer aus. Egal ob der Film
1,78:1 - 2,35:1 usw.

Kann man die Sache noch genauer auslesen?

Da fällt mir ein: Es gibt ja die Webserver Funktion.
W├ñre es eventuellm├Âglich eine Seite aufzubauen die per Buttonklick:

1. An Zoomplayer sendet welche DVD er abspielen soll?
2. Gleichzeitig einen IR-Code an die Maskierung versendet?

Die Webseite mit den relevanten Daten k├Ânnte ich mit Access und ASP aufbauen.

Was hälst du davon?

ze_sniper1
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

ze_sniper1 wrote:Hab jetzt etwas damit herum gespielt.

DvdArAnamorphic gibt Zoomplayer aber immer aus. Egal ob der Film
1,78:1 - 2,35:1 usw.

Kann man die Sache noch genauer auslesen?
Mehr gibt das DVD-Format leider nicht her. Da m├╝sstest du schon das Bild analysieren.
ze_sniper1 wrote:Da fällt mir ein: Es gibt ja die Webserver Funktion.
W├ñre es eventuellm├Âglich eine Seite aufzubauen die per Buttonklick:

1. An Zoomplayer sendet welche DVD er abspielen soll?
2. Gleichzeitig einen IR-Code an die Maskierung versendet?

Die Webseite mit den relevanten Daten k├Ânnte ich mit Access und ASP aufbauen.
Das ginge schon.
Einfach einen Request mit

Code: Select all

http://ip/?FormatX&X:\Path2DVD
erzeugen. Evtl auch mit einem Dummyframe oder Javascript. Sonst kriegst du halt das was auf dem Webserver liegt angezeigt.
Nach FormatX kannst du dann deine Maskierung aktivieren und den zweiten Parameter musst du mit einem Python Script auswerten, dass den ZoomPlayer entsprechend ansteuert. Sollte mit wenigen Zeilen gehen.

Wenn du sehr viele Formate haben willst ist es vielleicht besser einen Aufruf wie

Code: Select all

http://localhost/?PlayDVD&1.33&X:\Path2DVD
zu nehmen. Dann m├╝sstest du halt auch den Wert f├╝r die Maskierung auslesen, aber du hast dann nur ein Macro und nicht f├╝r jedes Bildformat eins.

In eg.event.payload steht dann der Pfad zur DVD. Je nachdem wie die DVD vorliegt m├╝sstest du dann ZP starten. Das m├╝sste man in der "Programm starten" Action finden. Wenn du das mit ASP hinbekommst, wird es am Python Script nicht scheitern.

@Bitmonster
Gibt es eigentlich die M├Âglichkeit das Webserverplugin gegen Zugriff zu sch├╝tzen? Eine einfache idendifikation per Browser, wie man es von htacces gesch├╝tzten Webseiten kennt w├ñre ja schon ausreichend.
Und hat der Payload den du in der Demo mitschickst einen Sinn?
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Bartman wrote: @Bitmonster
Gibt es eigentlich die M├Âglichkeit das Webserverplugin gegen Zugriff zu sch├╝tzen? Eine einfache idendifikation per Browser, wie man es von htacces gesch├╝tzten Webseiten kennt w├ñre ja schon ausreichend.
Und hat der Payload den du in der Demo mitschickst einen Sinn?
Authorization wird damit vorläufig nicht gehen. Ich habe keinen Source-Code dafür im Netz gefunden und das selber zu entwickeln fehlt mir die Lust. Der Webserver ist ja auch nur für das Intranet gedacht und bei mir wird der Port einfach in der Firewall dicht gemacht.
Was einfacher gehen würde, wäre ein IP-Filter. Nur der macht in der Regel weder innerhalb noch außerhalb eines Intranets Sinn.
Wenn man volle Webserver-Features haben will, dann sollte man sich eher einen Apache aufsetzen und dann mit einem Skript die Events zu EG schicken.

Das "&withoutRelease" Parameter macht bei der Implementierung des HTML-Demos Sinn, weil dadurch erst die ButtonUp-Events funktionieren.
Standard ist, dass ein Event beim Webserver gleich beendet wird. Mit "&withoutRelease" muss man den Event selber mit "?ButtonReleased" beenden.

EDIT: Oder meintest du die Zahlen? Die hatte ich mal eingebaut, weil der IE sonst Events verschluckt, wenn man mehrmals die absolut gleiche URL anfordert. Deshalb lass ich die Zahlen "wandern".
Bartman
Plugin Developer
Posts: 881
Joined: Sun Feb 12, 2006 9:03 am

Post by Bartman »

Bitmonster wrote:Wenn man volle Webserver-Features haben will, dann sollte man sich eher einen Apache aufsetzen und dann mit einem Skript die Events zu EG schicken.
Wie geht das denn?
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Bartman wrote:
Bitmonster wrote:Wenn man volle Webserver-Features haben will, dann sollte man sich eher einen Apache aufsetzen und dann mit einem Skript die Events zu EG schicken.
Wie geht das denn?
Genau wie mit Girder und dem Network Receiver Plugin z.B.
Ich hatte da fr├╝her ein PHP Skript am Laufen, dass einer mal auf der Girder-Seite abgelegt hatte.
ze_sniper1
Posts: 29
Joined: Sat Aug 19, 2006 2:50 pm

Post by ze_sniper1 »

Wenn du das mit ASP hinbekommst, wird es am Python Script nicht scheitern
Das mit ASP sollte ich hinkriegen nur in EG brauche ich Hilfe.

Ich w├╝rde also die Anfrage so senden:

Code: Select all

http://localhost/?PlayDVD&1.33&X:\Path2DVD
Die Frage ist eher ob der eingebaute Webserver ASP kann?
Genau wie mit Girder und dem Network Receiver Plugin z.B.
Ich hatte da fr├╝her ein PHP Skript am Laufen, dass einer mal auf der Girder-Seite abgelegt hatte.
Bitte um Details. Danke.

ze_sniper1
ze_sniper1
Posts: 29
Joined: Sat Aug 19, 2006 2:50 pm

Post by ze_sniper1 »

Gibt es eine M├Âglichkeit den IIS von XP in EG einzubinden?

Der interne Webserver kann ja keine ASP Seiten mit Datenbank Inhalten abarbeiten, oder?

ze_sniper1
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Nein, der interne k├Ânnte nur HTML und Python.
Wenn du den IIS benutzen willst, dann musst du dir halt ein ASP-Script bauen, dass auch mit dem Girder Internet Event Server funktionieren w├╝rde. Also die Events ├╝ber TCP/IP-Sockets verschickt. Vielleicht gibt es Beispiele daf├╝r auf der Girder-Seite. Zumindest f├╝r PHP gab es mal eins.
Last edited by Bitmonster on Sat Aug 26, 2006 6:25 pm, edited 1 time in total.
ze_sniper1
Posts: 29
Joined: Sat Aug 19, 2006 2:50 pm

Post by ze_sniper1 »

@ Bitmonster

Danke f├╝r den Tipp. Aber ich denke das ├╝berschreitet meinen Kenntnisstand in ASP. Zumal ich kaum Beispiele finden konnte.

ze_sniper1
ze_sniper1
Posts: 29
Joined: Sat Aug 19, 2006 2:50 pm

Post by ze_sniper1 »

Ich hatte da fr├╝her ein PHP Skript am Laufen, dass einer mal auf der Girder-Seite abgelegt hatte
Konnte bis jetzt leider kein Beispiel finden. Eventuell hast du das PHP Script kann noch irgendwo rumliegen :D

Dann k├Ânnte ich es m├Âglicherweise auf ASP umschreiben.

Hab nämlich meine ganze DVD-Sammlung auf der Webseite. Das wäre schone eine geile Sache die Movies dann gleich mit passender Maskierung von der Seite aus zu starten.

ze_sniper1
User avatar
Bitmonster
Site Admin
Posts: 2239
Joined: Mon Feb 06, 2006 10:28 pm

Post by Bitmonster »

Code: Select all

<?
function sendMsg($args)
{
    $fp = fsockopen($args["host"],$args["port"], $errno, $errstr, 10);
	
	if (!$fp)
    { //Something didn't work....
		echo "ERROR: $errno - $errstr\n";
		return FALSE;

	} else {

		// First wake up the server, for security reasons it does not
		// respond by it self it needs this string, why this odd word ?
		// well if someone is scanning ports "connect" would be very obvious
		// this one you'd never guess :-)
		
	    fputs($fp, "quintessence\n\r");
		
		// The server now returns a cookie, the protocol works like the
		// APOP protocol. The server gives you a cookie you add :<password>
		// calculate the md5 digest out of this and send it back
		// if the digests match you are in.
		// We do this so that noone can listen in on our password exchange
		// much safer then plain text.
		
		$cookie = fgets($fp, 400);		
		
		// Trim all enters and whitespaces off
		$cookie = trim($cookie);
		
		// Combine the token <cookie>:$args[pword]
		$token = $cookie . ":" . $args["password"];
		
		// Calculate the digest
		$digest = md5($token);
		
		// add the enters
		$digest = $digest . "\n";
				
		// Send it to the server		
		fputs($fp, $digest );
		
		// Get the answer
		$res = fgets($fp, 400);
		
		// If the password was correct and you are allowed to connect
		// to the server, you'll get "accept"
		if ( trim($res) != "accept" )
		{
			 fclose($fp);
			 return FALSE;
		}
		
		if (isset($args['payload']))
        {
            if (is_array($args['payload']))
            {
                foreach($args['payload'] as $key => $value)
                    fputs($fp, "payload " . $value . "\n");
            }else
            {
                if ( $args["payload"] <> "" )
				    fputs($fp, "payload ".$args["payload"]."\n");		
            }		
		}
		// now just pipe those commands to the server
		fputs($fp, $args["eventstring"]."\n");
		
		// tell the server that we are done nicely.
		fputs($fp, "close\n");
		
        fclose($fp);
			
		return TRUE;
	}
}


if (isset($_GET))
{	
    if(isset($_GET['host']))
        $args['host'] = urldecode($_GET['host']);
    else
        $args['host'] = '192.168.0.1';
    $args['port'] = 32333;
    $args['password'] = 'mypassword';
    $args['eventstring'] =  urldecode($_GET['event']);
    foreach($_GET as $key => $value)
        if(strcasecmp(substr($key, 0, 3), 'pld') == 0)
            $args['payload'][] = urldecode($value);
    sendMsg($args);
    if(!isset($_GET['REFERER']))
        $_GET['REFERER'] = "index.html";
    header("Location: http://".$_SERVER['HTTP_HOST']
                     . dirname($_SERVER['PHP_SELF'])
                     ."/".$_GET["REFERER"]);
}
?>

ze_sniper1
Posts: 29
Joined: Sat Aug 19, 2006 2:50 pm

Post by ze_sniper1 »

@ Bitmosnter

Danke.

Habe in der Zwischenzeit folgendes Script gefunden: ASPSock

AspSock allows ASP developers to connect to any TCP I/P port on a server and send or receive data

Wie muss ich EG jetzt konfigurieren damit ich Kommandos ├╝ber TCP empfangen und auswerten kann?

ze_sniper1
ze_sniper1
Posts: 29
Joined: Sat Aug 19, 2006 2:50 pm

Post by ze_sniper1 »

Hallo!

Soweit klappt die Sache jetzt schon ganz gut. Jetzt hab ich noch folgendes Problem. Wenn der Zoomplayer per Website gestartet wird scheint Eventghost keine anderen Befehle mehr per TCP anzunehmen.
Erst wenn die laufende Zoomplayer Instanz geschlossen ist werden Befehle die während des laufens des Zoomplayer abgesendet wurden gestartet.

Hier der Code der den Zoomplayer mit einem bestimmten Pfad startet:

Code: Select all




import eg
import os
import string




import _winreg
from win32api import ShellExecute


class SpecialPlugin(eg.PluginClass):

    def __close__(self):
        eg.notice("closing system plugin")
        eg.notice("done closing system plugin")

    def __init__(self):
	self.AddAction(Action1)
        # EventGhost will monitor the creation of every new subclass of 
        # eg.ActionClass, so everything that is finally needed is to call
        # self.AddAllActions() to instantiate all defined actions. 
        self.AddAllActions()



class Action1(eg.ActionClass):
    def __call__(self):
	file = 'C:\Programme\Zoom Player\zplayer.exe'
        os.spawnv(os.P_WAIT, file, (file,) + (eg.event.payload[1],))
Muss da noch eine Art "Nicht auf Beendigung warten" rein? Wenn ja wie?

ze_sniper1
Post Reply