如何使用nodejs和“ adb shell screenrecord ...”命令连接在浏览器中镜像视频的管道

时间:2018-08-14 07:43:58

标签: android node.js binary video-streaming adb

我正在尝试开发一个可以在具有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)

我不知道问题是什么。 这可能是一项非常复杂的任务,但是如果有人知道如何解决,请帮助我。

0 个答案:

没有答案