【发布时间】:2015-03-14 08:38:28
【问题描述】:
我目前遇到了一个非常奇怪的问题。
我正在尝试使用 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 界面的媒体中心。我正在使用 VLC 作为媒体播放器。
不能使用内置的 HTTP 接口吗? 它不适合我想要构建的东西。我想更好地控制我的媒体管理。
欢迎任何和所有的帮助。谢谢。
【问题讨论】:
-
这可能是一个时间问题,您需要等待生成的应用程序完成初始化,然后再尝试连接它?
-
我刚试过这个,我只用生成的进程启动了一个实例,另一个只用网络连接,第二个应用程序以同样的方式出错。被拒绝。我真的不认为这是问题所在,因为我确实总是短暂地看到 VLC 出现,然后我的应用程序会抛出错误,并且 VLC 会在应用程序退出时关闭。
-
仅仅因为你在视觉上看到了一些东西,并不意味着它已经准备好及时连接。如果您真的想将其排除在测试之外,请将所有客户端连接代码放在
setTimeout()中,等待 30 秒后再建立连接。 -
这仍然不是问题,如果我这样做,应用程序会在 30 秒内崩溃。同样的原因,无法连接到 VLC 进程。所以这似乎不是一个时间问题。我想知道子进程是否甚至创建了套接字。
-
听起来它没有在你认为的套接字上监听。您可以正常运行程序,然后在以管理员权限运行的 Windows 控制台窗口中运行
netstat -ab | more(因此它可以看到所有进程),它会显示哪些进程有侦听套接字。
标签: node.js sockets vlc child-process