Javascript Node.js子进程类型错误:无法读取属性'_可写状态';未定义的
我试图使用Javascript Node.js子进程类型错误:无法读取属性'_可写状态';未定义的,javascript,node.js,ffmpeg,process,child-process,Javascript,Node.js,Ffmpeg,Process,Child Process,我试图使用child_进程库将ffmpeg的一部分功能包装到Node.js API中,但是当我试图将任何数据发送到ffmpeg的stdin管道时,我得到一个错误TypeError:Cannot read undefined的属性'\u writeablestate' import {spawn} from "child_process" export default frames => { // Spawn ffmpeg process const ffmpeg = sp
child_进程
库将ffmpeg的一部分功能包装到Node.js API中,但是当我试图将任何数据发送到ffmpeg的stdin管道时,我得到一个错误TypeError:Cannot read undefined
的属性'\u writeablestate'
import {spawn} from "child_process"
export default frames => {
// Spawn ffmpeg process
const ffmpeg = spawn("ffmpeg", ["-f", "image2pipe", "-i", "-", "output.mkv"])
// Send frames to ffmpeg as stdin
frames.forEach(ffmpeg.stdin.write)
// Listen for output and errors
return new Promise((resolve, reject) => {
const chunks = []
ffmpeg.stdout.on("data", chunks.push)
ffmpeg.stderr.on("data", reject(data))
ffmpeg.on("close", code =>
resolve(Buffer.concat(chunks))
)
})
}
错误:
TypeError: Cannot read property '_writableState' of undefined
at Writable.write (_stream_writable.js:270:20)
at Array.forEach (<anonymous>)
at exports.default (/home/fiendfan1/workspace/nodejs/declare/dist/app/common/encodeVideo.js:21:12)
at _callee$ (/home/fiendfan1/workspace/nodejs/declare/dist/app/tests/video.js:34:84)
at tryCatch (/home/fiendfan1/workspace/nodejs/declare/node_modules/regenerator-runtime/runtime.js:65:40)
at Generator.invoke [as _invoke] (/home/fiendfan1/workspace/nodejs/declare/node_modules/regenerator-runtime/runtime.js:303:22)
at Generator.prototype.(anonymous function) [as next] (/home/fiendfan1/workspace/nodejs/declare/node_modules/regenerator-runtime/runtime.js:117:21)
at Generator.tryCatcher (/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/util.js:16:23)
at PromiseSpawn._promiseFulfilled (/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/generators.js:97:49)
at Promise._settlePromise (/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/promise.js:574:26)
at Promise._settlePromise0 (/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/promise.js:614:10)
at Promise._settlePromises (/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/promise.js:693:18)
at Async._drainQueue (/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/async.js:133:16)
at Async._drainQueues (/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/async.js:143:10)
at Immediate.Async.drainQueues [as _onImmediate] (/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/async.js:17:14)
at runCallback (timers.js:696:18)
TypeError:无法读取未定义的属性“\u writableState”
在Writable.write(_stream_Writable.js:270:20)
在Array.forEach()处
在exports.default(/home/fiendfan1/workspace/nodejs/declare/dist/app/common/encodeVideo.js:21:12)
在_callee$(/home/fiendfan1/workspace/nodejs/declare/dist/app/tests/video.js:34:84)
在tryCatch(/home/fiendfan1/workspace/nodejs/declare/node_modules/registrator runtime/runtime.js:65:40)
在Generator.invoke[as _invoke](/home/fiendfan1/workspace/nodejs/declare/node_modules/registrator runtime/runtime.js:303:22)
在Generator.prototype.(匿名函数)[as next](/home/fiendfan1/workspace/nodejs/declare/node_modules/registrator runtime/runtime.js:117:21)
在Generator.tryCatcher(/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/util.js:16:23)
在PromiseSpawn._promiseCompleted(/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/generators.js:97:49)
在Promise._结算Promise(/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/Promise.js:574:26)
在Promise._settlePromise0(/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/Promise.js:614:10)
在Promise._结算Promises(/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/Promise.js:693:18)
在Async.\u drainQueue(/home/fiendfan1/workspace/nodejs/declare/node\u modules/bluebird/js/release/Async.js:133:16)
在Async.\u drainQueues(/home/fiendfan1/workspace/nodejs/declare/node\u modules/bluebird/js/release/Async.js:143:10)
在Immediate.Async.drainQueues[as _onImmediate](/home/fiendfan1/workspace/nodejs/declare/node_modules/bluebird/js/release/Async.js:17:14)
运行回调时(timers.js:696:18)
这里的问题是我向子流程发送输入的方式
您不应该将每个图像分别发送到ffmpeg(即frames.forEach(ffmpeg.stdin.write)),而应该为要发送到进程的所有输入数据创建一个缓冲区,并将其写入其stdinffmpeg.stdin.end()
应在后面调用,以指示输入结束
ffmpeg.stdin.write(Buffer.concat(frames))
ffmpeg.stdin.end()