Javascript Google原生客户端,将二进制数据从NACL发送到前端

Javascript Google原生客户端,将二进制数据从NACL发送到前端,javascript,c++,arrays,google-nativeclient,Javascript,C++,Arrays,Google Nativeclient,如何将二进制数据(例如mp3/mp4数据)发送回前端 我知道有两种方法:利用NACL提供的沙盒文件系统,在前端获取url;使用VarArrayBuffer通过PostMessage()传递数据。如果有人能给我一个简单的例子,说明如何通过PostMessage()传递二进制数据,那就太好了。NACl文件系统API有一个Pong示例,但我对如何将文件位置检索为url,以便前端JS能够通过消息获取它感到困惑 以下是我到目前为止所做的工作,使用第二种方法通过PostMessage()和VarArrayB

如何将二进制数据(例如
mp3/mp4
数据)发送回前端

我知道有两种方法:利用NACL提供的沙盒文件系统,在前端获取url;使用
VarArrayBuffer
通过
PostMessage()
传递数据。如果有人能给我一个简单的例子,说明如何通过
PostMessage()
传递二进制数据,那就太好了。NACl文件系统API有一个Pong示例,但我对如何将文件位置检索为url,以便前端JS能够通过消息获取它感到困惑

以下是我到目前为止所做的工作,使用第二种方法通过
PostMessage()
VarArrayBuffer
传递数据:

  • 我成功地从联机mp4文件中检索到数据,并将其存储在char vector
    vector outputBuffer

  • 将数据转储到新的char缓冲区中,并创建
    VarArrayBuffer
    来保存数据并将其传递到JS端

    char* binaryBuffer = new char[outputBuffer.size()];
    int increment = 0;
    for (vector<char>::iterator it = outputBuffer.begin(); 
         it != outputBuffer.end(); it++) {
         binaryBuffer[increment] = *it;
    }
    
    pp::VarArrayBuffer outBuffer(binaryBuffer);
    instance_->PostMessage(outBuffer);//instance_ is a NACL module instance
    
    char*binaryBuffer=new char[outputBuffer.size()];
    整数增量=0;
    for(vector::iterator it=outputBuffer.begin();
    it!=outputBuffer.end();it++){
    binaryBuffer[增量]=*它;
    }
    pp::VarArrayBuffer突发缓冲区(二进制缓冲区);
    实例->后消息(突发)//instance_uu是一个NACL模块实例
    

那么,JS端应该如何捕获数组缓冲区呢?是通过
message.data
还是其他什么?

我不明白VarArrayBuffer的构造函数应该如何知道binaryBuffer的大小。我猜您的代码之所以能够编译,是因为pp::Var::Var(const char*utf8_str)构造函数需要一个以null结尾的UTF-8字符串,它被隐式调用()。