2016-04-23 15 views
1

Mein Problem ist das gleiche wie die in this Antwort erwähnt. Ich habe versucht, den Code zu verstehen, und das ist, was ich gelernt habe:Darwin Streaming Server installieren Probleme os x

Es wird in der Datei parse_xml.cgi versagt, versucht Nachrichten (return $message{$name}) aus einer Datei Nachrichten genannt zu bekommen (in der sich html_de Verzeichnis). Der $ messages Wert stammt aus dem Verfahren GetMessageHash in Datei adminprotocol-lib.pl:

sub GetMessageHash 
{ 
    return $ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} 
} 

Die $ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} in der Datei gesetzt streamingadminserver.pl:

$ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} = $messages{"en"} 

Ich weiß nicht, irgendetwas über Perl, so habe ich keine Ahnung von dem, was das Problem sein kann, für das, was ich gesehen $messages{"en"} hat den richtigen Wert (wenn ich Ich bekomme den Wert "Sun")).

Wenn ich jedoch versuche, print($ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}{'SunStr'} zu tun, bekomme ich nichts. Scheint wie $ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} nicht gesetzt

habe ich versucht, dieses einfache Beispiel und es funktionierte gut:

$ENV{"HELLO"} = "hello"; 
print($ENV{"HELLO"}); 

und es funktioniert gut, druckt „Hallo“.

Irgendeine Idee von dem was das Problem sein kann?

+0

Darwin Streaming Server ist funktionell obsolet. Seit 2007 gibt es keine neuen Veröffentlichungen mehr! Ich würde es vermeiden, es für irgendwelche neuen Projekte zu verwenden. – duskwuff

+0

Sie haben Recht, ich musste immer noch versuchen, weil ich nicht viele Optionen für das, was ich brauche, gefunden habe (ein Open Source Server, der MP4 über RTSP streamen kann). Wenn ich es benutzen wollte, müsste ich etwas anpassen (und etwas Zeit widmen, um Perl zu lernen), also werde ich weiter nachsehen. – venito

Antwort

0

Aussehen wie ein $messages{"en"}ist HashRef: Ein Zeiger zu einem gewissen Adreßspeicher einen Schlüssel-Wert-Speicher zu halten. Man könnte sogar die zugehörige Speicheradresse drucken:

perl -le 'my $hashref = {}; print $hashref;' 
HASH(0x1548e78) 

0x1548e78 die Adresse, aber es ist nur gültig innerhalb des gleichen laufenden Prozesses. Führen Sie den Beispielbefehl erneut aus, und Sie erhalten jedes Mal andere Adressen.

HASH (0x1548e78) ist auch nur eine vom Menschen lesbare Darstellung des realen gespeicherten Wertes. Einstellung $hashref2="HASH(0x1548e78)"; erstellt keine echte Referenz, nur eine Kopie der lesbaren Zeichenfolge.

Sie könnten diese Theorie leicht mit print $ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"} in beiden Skripten beweisen.

Data::Dumper wird in der Regel zu zeigen, den Inhalt des referenzierten Hash (Speicherplatz) verwendet:

use Data::Dumper; 
print Dumper($messages{"en"}); 
# or 
print Dumper($ENV{"QTSSADMINSERVER_EN_MESSAGEHASH"}); 

Dies zeigt auch, wenn der Zeiger/Verweis in beiden Skripten dereferenziert werden.

Die Lösung für Ihr Problem wahrscheinlich anstelle des hashref den Wert übergeben:

$ENV{"QTSSADMINSERVER_EN_SUN"} = $messages{"en"}->{SunStr}; 

Best Practice a verwendet -> zwischen den beiden Tasten. Die "oder" -Angaben für den Schlüssel auch optional if the key is a plain word.

Aber alles durch Umgebungsvariablen passieren fühlt sich falsch an. Sie sind möglicherweise nicht in der Lage, Referenzen auf OSX zu halten (ich weiß es nicht). Möglicherweise möchten Sie den Zeichenfolgenspeicher in eine Include-Datei extrahieren und über require laden.

Weitere Informationen zu Perl finden Sie unter http://www.perlmaven.com/ oder http://learn.perl.org.