简体   繁体   中英

LAME Encoder Node.js MP3 streaming

currently my code decodes MP3 files to PCM and then encodes output to whatever format is required 'MP3' or 'other', its using Node and FFMPEG for this currently. i want to use LAME to do the MP3 conversion encode and leave FFMEG for other formats but not sure how to go about with it. my relevant code currently: var createOutput = function(key) {

var encoderArgs = [];
var encoder;

if (outputs[key].format === 'mp3') {

    //encoder settings
    encoderArgs.push('-acodec', 'pcm_s16le');
    ..
    encoderArgs.push('-strict', '-2');


} else if (outputs[key].format === 'SOME OTHER FORMAT') {

    //encoder settings
    encoderArgs.push('-acodec', 'pcm_s16le');
    ..
    encoderArgs.push('-strict', '-2');

} else {

    return;

}

var encoder = child_process.spawn(serverOpts.converterPath, encoderArgs);
encoderArgs = null;


//handles any errors and resumes
encoder.once('error', function(err) { });
encoder.stdin.once('error', function(err) { });
encoder.stdout.once('error', function(err) { });
encoder.stderr.once('error', function(err) { });
encoder.stderr.resume();

//when data received in the standard in stream
inStream[key].on('data', function (chunk) {

    if (encoder.stdin.writable && !encoder.stdin._writableState.length) {

        encoder.stdin.write(chunk);

    }

});

//setup data listener
//when 'data' received on standard out stream
encoder.stdout.on('data', function (chunk) {

    historyBuffer[key].write(chunk);
    outStream[key].write(chunk);

});

encoder.once('close', function() {

    encoder.removeAllListeners();
    encoder.stdin.removeAllListeners();
    encoder.stderr.removeAllListeners();
    encoder.stdout.removeAllListeners();
    inStream[key].removeAllListeners();

    encoder = null;

    process.nextTick(function() {

        createOutput(key);

    });

});

i have tried to 'pipe' inStream[key] to encoder to historyBuffer[key] and outStream[key] but it does not work. can someone point me in the right direction please?

inStream[key]
    .pipe(encoder)
    .pipe(outStream[key]);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM