javascript - 在 BinaryJS 中访问字节

标签 javascript node.js

我已经实现了一个 NodeJs 服务器,使用 BinaryJS 。此时,我可以从多个客户端流式传输音频并在服务器中存储为 wav 文件。这是我如何执行此操作的服务器代码:

  binaryServer.on('connection', function (client) {
  var fileWriter = new wav.FileWriter('records/' + n + '.wav', {
    channels: 1,
    sampleRate: 48000,
    bitDepth: 16
  });

  client.on('stream', function (stream, meta) {
    stream.pipe(fileWriter);

      stream.on('end', function () {

          fileWriter.end();
    });

  });
});

现在,我想更进一步。我想将流存储在内存中,以发挥我的优势。为此,我需要能够访问流的字节(对吗?)。我怎样才能实现这个目标?我在 BinaryJS API 中没有找到任何内容。看来我需要实现一个 Buffer .

console.log(流):

  { domain: null,
  _events:
   { close: [ [Function], [Function: onclose], [Function: cleanup] ],
     data: [Function: ondata],
     end: [ [Function: onend], [Function: cleanup] ],
     error: [Function: onerror] },
  _maxListeners: undefined,
  id: 0,
  _socket:
   { _socket:
      { _connecting: false,
        _hadError: false,
        _handle: [Object],
        _host: null,
        _readableState: [Object],
        readable: true,
        domain: null,
        _events: [Object],
        _maxListeners: undefined,
        _writableState: [Object],
        writable: true,
        allowHalfOpen: true,
        destroyed: false,
        bytesRead: 530,
        _bytesDispatched: 129,
        _pendingData: null,
        _pendingEncoding: '',
        server: [Object],
        _idleTimeout: -1,
        _idleNext: null,
        _idlePrev: null,
        _idleStart: 20175228,
        parser: null,
        _paused: false,
        read: [Function],
        _consuming: true },
     bytesReceived: 10,
     readyState: 1,
     supports: { binary: true },
     protocol: undefined,
     protocolVersion: 13,
     upgradeReq:
      { _readableState: [Object],
        readable: true,
        domain: null,
        _events: {},
        _maxListeners: undefined,
        socket: [Object],
        connection: [Object],
        httpVersionMajor: 1,
        httpVersionMinor: 1,
        httpVersion: '1.1',
        complete: true,
        headers: [Object],
        rawHeaders: [Object],
        trailers: {},
        rawTrailers: [],
        _pendings: [],
        _pendingIndex: 0,
        upgrade: true,
        url: '/',
        method: 'GET',
        statusCode: null,
        statusMessage: null,
        client: [Object],
        _consuming: false,
        _dumped: false,
        parser: null },
     _isServer: true,
     _receiver:
      { fragmentedBufferPool: [Object],
        unfragmentedBufferPool: [Object],
        state: [Object],
        overflow: [],
        headerBuffer: <Buffer 45 28 26 9b e8 9c ff 02 8e 91>,
        expectOffset: 0,
        expectBuffer: <Buffer 45 28>,
        expectHandler: [Function],
        currentMessage: [],
        dead: false,
        onerror: [Function],
        ontext: [Function],
        onbinary: [Function],
        onclose: [Function],
        onping: [Function],
        onpong: [Function] },
     _sender: { _socket: [Object], firstFragment: true, _events: [Object] },
     _events:
      { close: [Object],
        open: [Function],
        drain: [Function],
        error: [Function],
        message: [Object] },
     binaryType: 'arraybuffer' },
  writable: true,
  readable: true,
  paused: false,
  _closed: false,
  _ended: false }

最佳答案

解决办法:

binaryServer.on('connection', function (client) {

  var fileWriter = new wav.FileWriter('records/' + n + '.wav', {
    channels: 1,
    sampleRate: 48000,
    bitDepth: 16
  });

  //Evento --> quando se inicia o stream 
  client.on('stream', function (stream, meta) {

    stream.pipe(fileWriter);
    /****the solution*****/
    stream.on('data', function(data){
      console.log(data);//<---Buffer type
    })   
    /**********************/ 
      stream.on('end', function () {

          console.log("end stream");
          fileWriter.end();
    });

  });
});

感谢您的提示@Bergi。这让我以不同的方式思考..

关于javascript - 在 BinaryJS 中访问字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31413915/

相关文章:

javascript - D3 中的节点属性

javascript - 为什么模糊和聚焦在 Safari 上不起作用?

JavaScript:如何使用包含唯一 id 的 span 标签将字符串中的每个单词包装起来?

node.js - 以 sudo 身份运行 npm install 时 Git 身份验证失败

node.js - Sequelize, Typescript - typescript 对模型的 getter 方法产生错误

javascript - 如何恢复到原始 CSS?

javascript - 如何使用 Bootstrap-Tour 和动态路径处理多页面游览?

javascript - 在 .map 中使用 `await` 可以工作,但似乎会跳过父级的 `await` 功能

javascript - 无法使用 chrome devtools 从 eclipse 运行 node.js 调试

node.js - Nodejs Express bodyParser 删除对象键