2015-12-06 103 views
0

我在写一个家庭自动化web应用程序。我有从Google音乐流到我的扬声器的音乐,我使用vlc输出声音。我无法做的事似乎是暂停歌曲。例如,cvlc url会打开并流式传输url,然后进入交互模式,在这种模式下可以键入暂停并暂停。打开终端,执行命令并进入交互模式

当我尝试从我的node.js应用程序执行此操作时,没有任何反应。它只是继续玩。

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

terminal.stdout.on('data', function (data) { 
    console.log(data); 
}); 

terminal.on('exit', function (code) { 
    console.log('child process exited with code ' + code); 
}); 

terminal.stdin.write('cvlc "' + req.url +'" & \n'); 
terminal.stdin.write('pause'); 

回答

0

尝试把一个“\ n”暂停命令后:

terminal.stdin.write('pause\n'); 

另外,我不熟悉CVLC,但是,如果你在BG启动它,不知道,你可以写入其标准输入,因此它可能会忽略所有'暂停'命令中的所有内容,您是否尝试在没有'&'的情况下调用它?

另外,为什么开始一个bash,然后运行cvlc?为什么不:

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

最后但并非最不重要,你确定默认路径是否足够?

+0

更改为,var terminal = require('child_process'); term = terminal.spawn('cvlc',[req.url]); term.stdin.write( '暂停\ n');仍然开始播放歌曲,然后不会暂停。 –

+0

而且默认路径应该没问题。如果我在直线终端中运行相同的命令,它会提示您可以键入暂停,播放,快速等等......基本上我希望能够调出提示并与之交互。 –

+0

你有没有从stdout中获得任何东西?顺便说一句,标准输出是一个十六进制缓冲区,你最好做:console.log(data.toString()); – Meir

0

我从来没有真正通过终端计算出来。相反,我使用VLC的http服务器选项,然后确实获得控制暂停和播放的请求。

菌种:

var term = spawn.spawn('cvlc',['-I', 'http',req.url,'localhost:8080']); 

暂停:

var req = http.get('http://:[email protected]:8080/requests/status.xml?command=pl_pause', function (r) { 
    r.on('data', function() { /* do nothing */ 
    }); 
}); 

和播放:

var reqd = http.get('http://:[email protected]:8080/requests/status.xml?command=pl_play', function (r) { 
     r.on('data', function() { /* do nothing */ 
     }); 
     r.on('error', function (err) { /* do nothing */ 
      console.log(err) 
     }); 
    }); 

希望帮助别人用VLC控制问题。我是通过无头的树莓派来做到这一点的。我试图避免为我的扬声器购买Chromecast并获得成功。

相关问题