In Teil 1 habe ich mich ja mit Ersatzlösungen für den, von Google kürzlich vorgestellten, 35$ Chromecast-HDMI-Adapter beschäftigt. In Teil 2 gibt es jetzt Butter bei die Fische. Sebastian Mauer hat eine solche Emulationslösung unter dem Namen Nodecast bei GitHub eingestellt. Läuft unter Windows, Mac OS X, Linux und was weiß ich. Im nachfolgenden "how-to"-Beitrag beschreibe ich die Schritte, wie ihr den Chromecast-Emulator Nodecast unter Windows (ich habe Windows 8.1 Preview verwendet), einrichtet.
Anzeige
Ok, ich habe es ja bereits in Teil 1 angedeutet – Sebastian Mauer hat eine klasse Arbeit mit dem Nodecast-Port für JavaScript und Node.js abgeliefert, aber leider nur eine spartanische Anleitung geliefert. Daher tauchen wir jetzt in die Details ein.
Was gebraucht wird: Ein Windows-Rechner, ein aktueller Google-Chrome als Browser (ich verwende die portable Version von Google Chrome 28 sowie die Beta von Version 29), ein wenig Zeit und ein Internetanschluss zum Herunterladen des benötigten Code.
Hol dir Nodecast vom GitHub …
Das Posting von Sebastian zu seinem Nodecast-Projekt findet sich in seinem Google+-Profil. Dort gibt er auch die Adresse auf GitHub an, unter der das Nodecast-Projekt gehostet ist.
Anzeige
Dort ladet ihr euch über die Schaltfläche Download Zip das gepackte Projekt in einen lokalen Ordner und entpackt anschließend die Dateien.
Der Rest ist dann ganz einfach – der obige Screenshot zeigt euch die README.md, die Sebastian verfasst hat – und damit legt ihr los. Sollte ja nach ein paar Handgriffen gepackt sein, bei der kurzen Anleitung …
… ja, nee, ist klar! Ein Noob wie ich, der Node für eine Waschmittelwerbung hält, braucht da schon ein wenig die Hilfe einer Suchmaschine und noch mehr Geduld. Ist wie bei Linux, da darfst Du auch 1.000 Seiten Doku wälzen, um im letzten Dokument den entscheidenden Hinweis zu finden, warum etwas nicht geht und wie man es zum Laufen bringt.
Hole dir Node.js
JavaScript ist zwar auf jeder Windows-Maschine per Browser enthalten. Aber Sebastian Mauer musste auf das JavaScript-Framework Node.js zurückgreifen, um die Streaming-Funktionen implementieren zu können. Als erstes braucht ihr daher Node.js, um dieses im nächsten Schritt unter Windows zu installieren. Ich habe mal eine Suchmaschine meines Vertrauens befragt und bin auf diesen Artikel zur Node.js-Installation gestoßen. War ganz nützlich, um überhaupt mal Land zu sehen.
Zwischenzeitlich ist die ganze Node.js-Installation recht einfach geworden, es gibt einen Windows-Installer auf der node.js-Seite. Dort findet ihr auch die Installer für Mac OS X oder für diverse Linux-Distributionen.
Node.js installieren
Sobald ihr die Datei node-v0.10.15-x86.msi für Windows heruntergeladen habt, lässt sich diese mit Administratorrechten installieren.
Ein Installer führt euch durch die betreffenden Schritte. Nachfolgend findet ihr die Dialogfelder des Setup-Assistenten, samt einigen, möglicherweise hilfreichen Anmerkungen.
Nach dem, hier nicht angezeigten Dialogfeld mit der Anerkennung der Lizenzbedingungen wird das Installationsverzeichnis abgefragt. Standardmäßig ist der Programme-Ordner von Windows voreingestellt.
Wählt die Change-Schaltfläche und stellt in gezeigtem Dialogfeld den Zielordner ein.
Mein Tipp: Legt euch einen Ordner nodecast auf dem Windows-Laufwerk an und lasst Nodecast in diesem Ordner installieren. Warum? Im Installationsordner sind später die Nodecast-Projektdateien unterzubringen und dann bestimmte Anpassungen vorzunehmen. Wenn ihr den Ordner selbst als Installationsverzeichnis einrichtet, habt ihr vom Benutzerkonto die notwendigen Zugriffsrechte. Sprich: Es muss nicht für jeden Kopier- oder Anpassungsvorgang die Bestätigung der Benutzerkontensteuerung eingeholt werden. Und es ist auch ganz angenehm, wenn der ganze Projekt-Klump nicht im Programme-Ordner des Systems rumdümpelt.
In obigen Dialogfeld lasst ihr einfach alle Optionen zur Nodecast-Installation zu. Damit gelangt das gesamte Projekt in den Zielordner. Sobald das folgende Dialogfeld erscheint, wählt ihr die Install-Schaltfläche.
Anschließend lasst ihr die Installation durchlaufen. Der Fortschritt wird vom Assistenten angezeigt.
Sobald das nachfolgende Dialogfeld erscheint, ist Node.js installiert und das Dialogfeld kann über Finish geschlossen werden.
Hier ist der Inhalt des Node.js-Installationsordners zu sehen (im konkreten Fall hatte ich das Teil leider im Programme-Ordner installieren lassen). Nun könnt ihr auf die Schnelle bereits einen ersten Text durchführen, ob Node.js funktionsfähig ist. Hierzu öffnet ihr eine (administrative) Eingabeaufforderung. Unter Windows 8.0/8.1 lässt sich diese über das Ordnerfenster öffnen (einfach den Installationsordner im Navigationsbereich markieren und im Menü Datei die betreffenden Befehle wählen.
Im Fenster der administrativen Eingabeaufforderung, gebt ihr folgende Befehle ein.
Node
console.log ("Test")
Jeder Befehl ist mit der Eingabeaufforderung zu bestätigen. Der erste Befehl startet Node.js, welches sich im Fenster mit dem Befehlsprompt > meldet. Der zweite Befehl versucht einen Text in der Eingabeaufforderung auszugeben.
Wenn das Ergebnis wie im obigen Screenshot gezeigt, aussieht, ist Node.js funktionsfähig. Durch Strg+C lässt sich das Programm beenden. Im nächsten Schritt könnt ihr noch die Batch-Datei Nodevars.bat ausführen.
Dieses wird hier in einer administrativen Eingabeaufforderung gezeigt und setzt die Pfade in der Path-Umgebungsvariablen.
Nodecast einrichten
Nachdem Node.js arbeitsbereit ist, gilt es im nächsten Schritt das Git-Hub Nodecast-Project so einzurichten, dass der Chromecast-Emulator arbeitsbereit ist. Ich gehe davon aus, dass das Git-Hub Nodecast-Projektarchiv heruntergeladen und in einem lokalen Ordnern entpackt wurde. Sebastian Mauer kürzt den Schritt in der simplen Anweisung "Make sure to install all dependencies using npm install" ab. Nett, aber wie geht das? Ich muss gestehen, ich habe ein paar Schüsse gebraucht, bis ich es auf die Reihe gebracht hatte (vorher noch nie Berührung mit Node.js gehabt).
1. Zuerst kopiert ihr den Inhalt des Git-Hub-Projektordners in das Nodecast-Installationsverzeichnis.
Wichtig ist, dass die Dateien package.json, die XML-Dateien und die Datei server.js im Hauptverzeichnis des Nodecast-Installationsordners mit der Node.js-Installation liegen und dass die Unterordner des Projekts auch vorhanden sind. Nachfolgender Screenshot zeigt die betreffende Ordnerhierarchie.
2. Dann öffnet ihr eine administrative Eingabeaufforderung, indem ihr ggf. wie oben beschrieben über die Registerkarte Datei des Ordnerfensters vorgeht.
3. Im Fenster der Eingabeaufforderung sind dann die Abhängigkeiten des Nodecast-Projekts von den Node.js-Bibliotheken mit folgender Anweisung einzurichten.
npm install
Im Installationsordner findet sich hierzu die Datei npm.cmd, die das automatisch macht. Die Ausführung des Befehls bewirkt, dass die erforderlichen Verweise (sind in der Datei package.json definiert) auf die aus Node.js benötigten Bibliotheken aufgelöst werden. Das Ganze sieht dann im Fenster der Eingabeaufforderung so aus.
In der ersten Zeile gibt es eine Warnung, weil ein Repository-Feld fehlt – aber es dürfen keine rot geschriebenen Fehlermeldungen auftreten. Nachfolgend habe ich mal alle npm-Statusmeldung aus der Eingabeaufforderung herausgezogen, um einen Überblick zu geben, was da an Warnungen erfolgen kann.
C:\nodecast>npm install npm WARN package.json nodecast@0.0.1 No repository field. npm http GET https://registry.npmjs.org/peer-ssdp npm http GET https://registry.npmjs.org/express npm http GET https://registry.npmjs.org/node-uuid npm http GET https://registry.npmjs.org/websocket npm http GET https://registry.npmjs.org/querystring npm http GET https://registry.npmjs.org/superagent npm http 200 https://registry.npmjs.org/peer-ssdp npm http GET https://registry.npmjs.org/peer-ssdp/-/peer-ssdp-0.0.2.tgz npm http 200 https://registry.npmjs.org/node-uuid npm http GET https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz npm http 200 https://registry.npmjs.org/querystring npm http GET https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz npm http 200 https://registry.npmjs.org/websocket npm http GET https://registry.npmjs.org/websocket/-/websocket-1.0.8.tgz npm http 200 https://registry.npmjs.org/peer-ssdp/-/peer-ssdp-0.0.2.tgz npm http 200 https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz npm http 200 https://registry.npmjs.org/superagent npm http GET https://registry.npmjs.org/superagent/-/superagent-0.15.4.tgz npm http 200 https://registry.npmjs.org/websocket/-/websocket-1.0.8.tgz npm http 200 https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.0.tgz npm http 200 https://registry.npmjs.org/express npm http GET https://registry.npmjs.org/express/-/express-3.3.5.tgz npm http 200 https://registry.npmjs.org/superagent/-/superagent-0.15.4.tgz npm http 200 https://registry.npmjs.org/express/-/express-3.3.5.tgz npm http GET https://registry.npmjs.org/commander/1.2.0 npm http GET https://registry.npmjs.org/connect/2.8.5 npm http GET https://registry.npmjs.org/mkdirp/0.3.5 npm http GET https://registry.npmjs.org/range-parser/0.0.4 npm http GET https://registry.npmjs.org/buffer-crc32/0.2.1 npm http GET https://registry.npmjs.org/send/0.1.4 npm http GET https://registry.npmjs.org/cookie-signature/1.0.1 npm http GET https://registry.npmjs.org/debug npm http GET https://registry.npmjs.org/methods/0.0.1 npm http GET https://registry.npmjs.org/fresh/0.2.0 npm http GET https://registry.npmjs.org/cookie/0.1.0 npm http GET https://registry.npmjs.org/formidable/1.0.14 npm http GET https://registry.npmjs.org/emitter-component/1.0.0 npm http GET https://registry.npmjs.org/qs/0.6.5 npm http GET https://registry.npmjs.org/debug npm http GET https://registry.npmjs.org/mime/1.2.5 npm http GET https://registry.npmjs.org/cookiejar/1.3.0 > websocket@1.0.8 install C:\nodecast\node_modules\websocket > node install.js [websocket v1.0.8] Attempting to compile native extensions. [websocket v1.0.8] Native code compile failed!! Please note that this module DOES NOT REQUIRE the native components and will still work without them, though not quite as efficiently. On Windows, native extensions require Visual Studio and Python. On Unix, native extensions require Python, make and a C++ compiler. Start npm with --websocket:verbose to show compilation output (if any). npm http 200 https://registry.npmjs.org/range-parser/0.0.4 npm http GET https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz npm http 200 https://registry.npmjs.org/commander/1.2.0 npm http GET https://registry.npmjs.org/commander/-/commander-1.2.0.tgz npm http 200 https://registry.npmjs.org/mkdirp/0.3.5 npm http 200 https://registry.npmjs.org/connect/2.8.5 npm http GET https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz npm http GET https://registry.npmjs.org/connect/-/connect-2.8.5.tgz npm http 200 https://registry.npmjs.org/buffer-crc32/0.2.1 npm http GET https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz npm http 200 https://registry.npmjs.org/methods/0.0.1 npm http 200 https://registry.npmjs.org/send/0.1.4 npm http GET https://registry.npmjs.org/methods/-/methods-0.0.1.tgz npm http GET https://registry.npmjs.org/send/-/send-0.1.4.tgz npm http 200 https://registry.npmjs.org/cookie-signature/1.0.1 npm http GET . 1.tgz npm http 200 https://registry.npmjs.org/debug npm http GET https://registry.npmjs.org/debug/-/debug-0.7.2.tgz npm http 200 https://registry.npmjs.org/fresh/0.2.0 npm http GET https://registry.npmjs.org/fresh/-/fresh-0.2.0.tgz npm http 200 https://registry.npmjs.org/cookie/0.1.0 npm http GET https://registry.npmjs.org/cookie/-/cookie-0.1.0.tgz npm http 200 https://registry.npmjs.org/formidable/1.0.14 npm http GET https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz npm http 200 https://registry.npmjs.org/emitter-component/1.0.0 npm http 200 https://registry.npmjs.org/qs/0.6.5 npm http 200 https://registry.npmjs.org/mime/1.2.5 npm http GET . 0.0.tgz npm http GET https://registry.npmjs.org/mime/-/mime-1.2.5.tgz npm http GET https://registry.npmjs.org/qs/-/qs-0.6.5.tgz npm http 200 https://registry.npmjs.org/cookiejar/1.3.0 npm http GET https://registry.npmjs.org/cookiejar/-/cookiejar-1.3.0.tgz npm http 200 https://registry.npmjs.org/debug npm http 200 https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz npm http 200 https://registry.npmjs.org/commander/-/commander-1.2.0.tgz npm http 200 https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz npm http 200 https://registry.npmjs.org/connect/-/connect-2.8.5.tgz npm http 200 https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz npm http 200 https://registry.npmjs.org/methods/-/methods-0.0.1.tgz npm http 200 https://registry.npmjs.org/send/-/send-0.1.4.tgz npm http 200 . 1.tgz npm http 200 https://registry.npmjs.org/debug/-/debug-0.7.2.tgz npm http 200 https://registry.npmjs.org/fresh/-/fresh-0.2.0.tgz npm http 200 https://registry.npmjs.org/cookie/-/cookie-0.1.0.tgz npm http 200 https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz npm http 200 . 0.0.tgz npm http 200 https://registry.npmjs.org/mime/-/mime-1.2.5.tgz npm http 200 https://registry.npmjs.org/qs/-/qs-0.6.5.tgz npm http 200 https://registry.npmjs.org/cookiejar/-/cookiejar-1.3.0.tgz npm http GET https://registry.npmjs.org/keypress npm http GET https://registry.npmjs.org/mime npm http GET https://registry.npmjs.org/uid2/0.0.2 npm http GET https://registry.npmjs.org/pause/0.0.1 npm http GET https://registry.npmjs.org/bytes/0.2.0 npm http 200 https://registry.npmjs.org/keypress npm http GET https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz npm http 200 https://registry.npmjs.org/mime npm http GET https://registry.npmjs.org/mime/-/mime-1.2.10.tgz npm http 200 https://registry.npmjs.org/uid2/0.0.2 npm http 200 https://registry.npmjs.org/pause/0.0.1 npm http GET https://registry.npmjs.org/uid2/-/uid2-0.0.2.tgz npm http GET https://registry.npmjs.org/pause/-/pause-0.0.1.tgz npm http 200 https://registry.npmjs.org/bytes/0.2.0 npm http GET https://registry.npmjs.org/bytes/-/bytes-0.2.0.tgz npm http 200 https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz npm http 200 https://registry.npmjs.org/mime/-/mime-1.2.10.tgz npm http 200 https://registry.npmjs.org/uid2/-/uid2-0.0.2.tgz npm http 200 https://registry.npmjs.org/pause/-/pause-0.0.1.tgz npm http 200 https://registry.npmjs.org/bytes/-/bytes-0.2.0.tgz npm WARN prefer global npm@1.3.5 should be installed with -g peer-ssdp@0.0.2 node_modules\peer-ssdp node-uuid@1.4.0 node_modules\node-uuid querystring@0.2.0 node_modules\querystring websocket@1.0.8 node_modules\websocket superagent@0.15.4 node_modules\superagent +-- methods@0.0.1 +-- cookiejar@1.3.0 +-- qs@0.6.5 +-- emitter-component@1.0.0 +-- debug@0.7.2 +-- mime@1.2.5 +-- formidable@1.0.14 express@3.3.5 node_modules\express +-- methods@0.0.1 +-- range-parser@0.0.4 +-- cookie-signature@1.0.1 +-- fresh@0.2.0 +-- buffer-crc32@0.2.1 +-- cookie@0.1.0 +-- debug@0.7.2 +-- mkdirp@0.3.5 +-- commander@1.2.0 (keypress@0.1.0) +-- send@0.1.4 (mime@1.2.10) +-- connect@2.8.5 (uid2@0.0.2, bytes@0.2.0, qs@0.6.5, pause@0.0.1, formidable@1. 0.14) C:\nodecast>
Es gibt eine Fehlermeldung, dass die WebSocket native extensions nicht compiliert werden können. Das ist aber kein Problem, weil die Node.js-Bibliotheken das auch so auflösen können. Ursache ist, dass zum Compilieren eine Visual Studio- und Python-Installation Voraussetzung ist – was ich auf meinem System nicht habe.
Das Ausführen des npm install-Befehls muss in einer administrativen Eingabeaufforderung erfolgen. Und es ist wichtig, dass die Nodecast-Projektdateien korrekt im Installationsordner vorliegen. Das Kopieren darf erst nach der Node.js-Installation erfolgen. Ich hatte bei der Inbetriebnahme das Problem, dass das Casten von Inhalten scheinbar nicht funktionierte. Daher habe ich dann Node.js während diverser Experimente mehrfach neu installiert und wunderte mich, dass npm install im Anschluss nur Fehler auswarf. Irgendwann kam ich auf den Trichter, dass bei der Node.js-Installation die Git-Hub-Projektdateien von Nodecast gelöscht werden.
Es gibt noch die Option npm install –g zu verwenden, um die Dependencies global zu installieren – was ich auch mal probiert habe. Am Ergebnis ändert sich für Nodecast nichts.
Nach diesen Schritten sollte Windows soweit vorbereitet sein, dass sich Nodecast als Chromecast-Empfänger verwenden lässt. Falls Sie mit Linux oder Mac OS X arbeiten, ist eine analoge Vorgehensweise erforderlich. Ich bin im Moment nicht sonderlich motiviert, meine Hackintosh-VM oder eine Linux-VM zu booten, um den Nodecast-Ansatz auch noch dort zu testen und zu beschreiben. Falls ihr mit Mac OS X arbeitet, könntet ihr alternativ auch einen Blick auf die Leapcast-python-Implementierung werfen. Wolf Paulus hat hier einen feinen Blog-Beitrag zu diesem Thema zusammengeschrieben
In Teil 3 zeige ich dann, wie man das Ganze verheiratet und aus einer YouTube-Seite auf den Chromecast-Emulator Nodecast streamt. Auch da bin ich gegen die Wand gerannt und habe mir die Finger wund getestet, weil ein bestimmter Ansatz mit einem Verbindungsabbruch endete.
Artikelreihe:
i: Chromecast-Emulatoren als Testumgebung – Teil 1
ii: Nodecast: Chromecast-Emulator how to – Teil 2
iii: Nodecast: Chromecast-Emulator im Hands on – Teil 3
iv: Android Chromecast-Emulator als Beta verfügbar–Teil 4
Ähnliche Artikel:
a1: Chromecast: HDMI-Streaming-Stick vorgestellt
a2: Meine 2 Cents/Gedanken zu Google Chromecast …
a3: Kann Google Chromcast vielleicht Miracast?
a4: Chromecast im Teardown
b1: Miracast bei Windows 8.1
b2: DLNA im hands-on-Experiment
b3: Den Fernseher per inakustik-Stick mit DLNA nachrüsten
b4: DLNA-Streaming unter Android
b5: CheapCast: Googles Chromecast für Arme?
c1: Experimenting with ICS (in Virtualbox, VMlite, VMware)
c2: Testing Android-x86 Ice Cream Sandwich-Image from VMLite
c3: VBoot: Genialer Ansatz zum Booten aus virtuellen Laufwerken
Anzeige
Hallo,
ich bekomme nur dieses als Ergebnis
C:\Users\Roman>npm install
npm WARN enoent ENOENT: no such file or directory, open
'C:\Users\Roman\package.json'
npm WARN Roman No description
npm WARN Roman No repository field.
npm WARN Roman No README data
npm WARN Roman No license field.
Bei mir irgendwie nichts mit Repositories. Weißt du was zu tun ist?
MfG
Das ist ein vier Jahre alter Beitrag, und das Teil habe ich nie wieder angefasst, weil Google diesen Ansatz irgendwann geblockt hat.