如何在NodeJS中访问子进程的套接字?

时间:2015-03-13 17:13:31

标签: node.js sockets vlc child-process

我目前遇到了一个非常奇怪的问题。

我正在尝试使用NodeJS子进程启动VLC,然后使用套接字访问它的远程控制(RC)接口。连接到此套接字时会出现此问题。我收到错误,连接被拒绝了。端口已打开,允许应用程序来自防火墙。

棘手的部分是,当我使用此接口手动打开VLC,并且只尝试连接套接字时,它可以工作。我假设在生成过程中的某些东西使得事情不同导致错误。

以下是我尝试运行的代码:

var spawn = require('child_process').spawn;

var file_dir = "V:\\TEST\\";
var files = ["Ika.mkv", "Nami.mkv", "Azu.mkv"];

var player = spawn("C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe", ['--intf="rc"', '--rc-host="localhost:3000"', '--fullscreen', file_dir + files[0]]);

var net = require('net');
var client = net.createConnection(3000, "localhost");

client.on('connect', function() {
    console.log('connected to VLC on port 3000');
    client.write("add " + file_dir + files[1] + "\n");
    client.write("enqueue " + file_dir + files[2] + "\n");

    client.write("help" + "\n");
});

client.on('data', function(data) {
    console.log(data.toString());
});

client.on('end', function() {
    console.log('disconnected from server');
});

我在两台机器上试过这个代码,我遇到了同样的问题。

您可能会问一些问题: 什么操作系统? Windows 8.1

为什么我需要使用套接字? VLC没有任何可从标准输入或标准输出读写的接口。我尝试了很多不同的选择,他们什么都不做。

我想要建立什么? 具有Web界面的Media Center。我正在使用VLC作为媒体播放器。

您是否无法使用内置的HTTP界面? 它不适合我想要建立的东西。我想要更好地控制我的媒体管理。


欢迎任何和所有帮助。谢谢。


1 个答案:

答案 0 :(得分:1)

原因是一些奇怪的原因并非所有命令行参数都传递给VLC实例。

我通过将RC接口的实例化和将RC模式设置为localhost:3000

来解决它

这是产生过程的新行

var player = spawn("C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe", ['-I rc --rc-host=\"localhost:3000\"','--fullscreen', file_dir + files[0]]);

这样可行,只有它还会创建一个RC控制台窗口,但我可以忍受它。

感谢@ jfriend00帮助解决这个奇怪的谜团。