J'essaie de créer une extension qui utilise la messagerie native Chrome pour communiquer avec youtube-dl
à l'aide d'un script hôte node.js. J'ai été capable d'analyser avec succès le stdin de l'extension & également été en mesure d'exécuter un processus enfant (c'est-à-dire touch file.dat
), mais lorsque j'essaie d'exec/spawn youtube-dl
il se bloque sur la commande. J'ai essayé le script hôte indépendamment de l'entrée native de chrome et cela fonctionne très bien. Je pense que le problème peut avoir quelque chose à voir avec les limitations de 1 Mo sur la taille du tampon de la messagerie native Chrome. Y at-il un moyen de lire le tampon?Messagerie native Chrome - Processus enfant suspendu
#! /usr/bin/env node
"use strict";
const fs = require('fs');
const exec = require('child_process').execSync;
const dlPath = '/home/toughluck/Music';
let first = true;
let buffers = [];
process.stdin.on('readable',() => {
let chunk = process.stdin.read();
if (chunk !== null) {
if (first) {
chunk = chunk.slice(4);
first = false;
}
buffers.push(chunk);
}
});
process.stdin.on('end',() => {
const res = Buffer.concat(buffers);
const url = JSON.parse(res).url;
const outTemplate = `${dlPath}/%(title)s.%(ext)s`;
const cmdOptions = {
shell: '/bin/bash'
};
const cmd = `youtube-dl --extract-audio --audio-format mp3 -o \"${outTemplate}\" ${url}`;
// const args = ['--extract-audio', '--audio-format', 'mp3', '-o', outTemplate, url];
// const cmd2 = 'youtube-dl';
process.stderr.write('Suck it chrome');
process.stderr.write('stderr doesnt stop host');
exec(cmd, cmdOptions, (err, stdout, stderr) => {
if (err) throw err;
process.stderr.write(stdout);
process.stderr.write(stderr);
});
process.stderr.write('\n Okay....');
});
Le code de base complet peut être trouvé à https://github.com/wrleskovec/chrome-youtube-mp3-dl