2015-12-06 3 views
0

Я пишу веб-приложение для домашней автоматизации. У меня есть музыка, которая транслируется из музыки 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

попытаться положить «\ п» после приостановки команды:

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

Кроме того, я не знаком с CVLC, но, если вы запустите его в BG, не уверен, что вы можете напишите на его stdin, следовательно, он может игнорировать все в вашей команде «пауза», вы пытались вызвать его без «&»?

Кроме того, зачем запускать bash, а затем запускать cvlc? Почему нет:

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

И последнее, но не менее важное: вы уверены, что путь по умолчанию достаточен?

+0

Изменен, var terminal = require ('child_process'); term = terminal.spawn ('cvlc', [req.url]); term.stdin.write ('пауза \ п'); Все еще начинается песня, а затем не приостанавливается. –

+0

И путь по умолчанию должен быть точным. Если я запускаю ту же самую команду в прямом терминале, она вызывает подсказку, в которой вы можете ввести паузу, воспроизведение, быстрый и т. Д. В принципе, я хочу, чтобы можно было вызвать подсказку и взаимодействовать с ней. –

+0

Вы получаете что-нибудь из stdout? Btw, stdout является шестнадцатеричным буфером, вам лучше: console.log (data.toString()); – Meir

0

Я никогда не думал об этом через терминал. Вместо этого я использовал параметр http-сервера VLC, а затем получил запросы на управление паузой и воспроизведением.

Spawn:

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 для своих ораторов и добился успеха.

Смежные вопросы