我正在尝试开发一个可以在具有USB连接的浏览器中进行手机镜像的应用程序(如果不是不可能的话,应该在这种情况下(浏览器或电子设备)完成此操作。
实际上,我不知道仅使用javascript和nodejs是否可以实现,但是由“电子”制成的vysor应用已实现了此功能。
我找到了adb命令来将手机屏幕另存为视频。当我使用nodejs的spawn方法检查命令时,每次移动电话的屏幕更改时,stdout上都会发生数据事件,并且会传递断文本(可能是二进制文件)。
const { spawn } = require('child_process');
const adbRecord = spawn('adb', ['shell', 'screenrecord', '--output-format=h264', '-']);
adbRecord.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
我对流,缓冲区和二进制文件不太了解,所以我查找了相关数据。 我想要的是一个可以镜像手机屏幕的视频流服务器,所以我认为可以将二进制数据存储在缓冲区中,将缓冲区连接到双工对象,然后将其与http响应连接。 但是我的代码从一开始就被阻止了。
const { Duplex } = require('stream');
const stream = new Duplex();
adbRecord.stdout.pipe(stream);
Error: _write() is not implemented
at Duplex.Writable._write (_stream_writable.js:545:6)
at doWrite (_stream_writable.js:397:12)
at writeOrBuffer (_stream_writable.js:383:5)
at Duplex.Writable.write (_stream_writable.js:290:11)
at Socket.ondata (_stream_readable.js:639:20)
at emitOne (events.js:121:20)
at Socket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at Socket.Readable.push (_stream_readable.js:208:10)
我不知道问题是什么。 这可能是一项非常复杂的任务,但是如果有人知道如何解决,请帮助我。