2013-06-02 4 views
1

J'essaye d'exécuter une commande qui ouvre le joueur de VLC et les flux vidéo de RTMP dedans. Mais quand je l'exécute, le lecteur VLC se lève puis se ferme. Je pense que c'est parce que l'obus sur lequel il repose est en train d'être tué. Comment puis-je garder la coquille en vie?nodejs exec garde le shell en vie?

Exécution de la même commande de cmd ligne dans Windows fonctionne très bien. Et la fermeture de la coquille ferme le lecteur VLC.

Mon code ressemble à ceci

var exec = require('child_process').exec 
exec('"Z:/downloads/rtmpdump-2.4-git-010913-windows/rtmpdump.exe" -r "rtmp://199.9.251.83/app/jtv__cQlY3imWtyDf4Cr" -j "ae9d2c8bbe586ac9f88a4fae9ec5841c3976092c:{\"swfDomains\": [\"justin.tv\", \"jtvx.com\", \"xarth.com\", \"twitchtv.com\", \"twitch.tv\", \"newjtv.com\", \"jtvnw.net\", \"wdtinc.com\", \"imapweather.com\", \"facebook.com\", \"starcrafting.com\"], \"streamName\": \"jtv__cQlY3imWtyDf4Cr\", \"expiration\": 1370153205.846189, \"geo_ip\": \"91.10.111.130\", \"server\": \"video3-1\"}" --swfVfy "http://www-cdn.jtvnw.net/widgets/live_embed_player.r4b02d38f442d7cae5646f1a1c17078362f5fd857.swf?channel=games&referer=&channel=games" -v -o - | "C:/Program Files (x86)/VideoLAN/VLC/vlc.exe" - --play-and-exit') 

Répondre

4

Vous avez spécifié Node.js, mais n'a pas fourni un exemple de code Node.js. Devrions-nous supposer exec(command); est censé représenter require('child_process').exec(command);?

Si c'est le cas, vous pouvez utiliser childprocess.spawn à la place. Exec a des limitations et est destiné à un processus à court terme qui produit des données textuelles via stdio. Si la sortie du processus exec'd dépasse la mémoire tampon pré-allouée, elle se terminera (pas nécessairement votre problème, mais une possibilité). Spawn est destiné aux processus plus longs (ils peuvent même être détachés du parent dans certains cas).

S'il se ferme toujours immédiatement, le problème n'est probablement pas dû à la fin prématurée du shell. Laissez nous savoir.

EDIT:

Pour répondre à votre commentaire:

Fondamentalement, vous briserait les arguments fondés sur l'endroit où les espaces se produisent (sauf si un argument est enveloppé entre guillemets, ce qui serait considéré comme un seul argument) . Vous devez également faire le tuyau manuellement, mais il y a un exemple de comment faire cela dans la documentation spawn. Une autre alternative serait de simplement générer un fichier de script shell, puis d'utiliser un noeud pour exécuter ce script.

+0

J'ai ajouté la commande exacte que j'essaie de lancer à ma description. Je n'ai aucune idée de comment l'exécuter en raison de 'spawn'. Je pense que je dois le décomposer en args? Mais je ne sais pas comment parce que la commande est si longue –

+0

Voir si le montage répond à votre question. –

+0

C'est énervant de voir comment 'spawn' nécessite des arguments comme ça ... Et la chose du tuyau manuel, quel gâchis. Je vais probablement générer et exécuter un script shell, bonne idée. –

Questions connexes