【问题标题】:Encoding/Unmasking Websocket binary data in PHP在 PHP 中编码/取消屏蔽 Websocket 二进制数据
【发布时间】:2015-06-23 19:14:05
【问题描述】:

我已经建立了一个能够从客户端读取字符串数据的 PHP WebSocket 服务器。我的问题是关于如何处理二进制数据类型。下面是客户端的代码,它将麦克风输入记录为 Float32Array 对象,并通过 WebSocket 连接以二进制形式发送数据。

websocket = new WebSocket("ws://...");
websocket.binaryType = "arraybuffer";

recorder.onaudioprocess = function(stream) {
    var inputData = stream.inputBuffer.getChannelData(0);
    websocket.send(inputData);
}

至于服务器端,我正在使用我在网上找到的以下函数进行编码/取消屏蔽。

function mask($text)
{
    $b1 = 0x80 | (0x1 & 0x0f);
    $length = strlen($text);

    if( $length <= 125)
        $header = pack('CC', $b1, $length);
    elseif ($length > 125 && $length < 65536)
        $header = pack('CCS', $b1, 126, $length);
    elseif ($length >= 65536)
        $header = pack('CCN', $b1, 127, $length);

    return $header.$text;
}

function unmask($payload) 
{
    $length = ord($payload[1]) & 127;

    if($length == 126) {
        $masks = substr($payload, 4, 4);
        $data = substr($payload, 8);
        $len = (ord($payload[2]) << 8) + ord($payload[3]);
    }
    elseif($length == 127) {
        $masks = substr($payload, 10, 4);
        $data = substr($payload, 14);
        $len = (ord($payload[2]) << 56) + (ord($payload[3]) << 48) +
            (ord($payload[4]) << 40) + (ord($payload[5]) << 32) + 
            (ord($payload[6]) << 24) +(ord($payload[7]) << 16) + 
            (ord($payload[8]) << 8) + ord($payload[9]);
    }
    else {
        $masks = substr($payload, 2, 4);
        $data = substr($payload, 6);
        $len = $length;
    }

    $text = '';
    for ($i = 0; $i < $len; ++$i) {
        $text .= $data[$i] ^ $masks[$i%4];
    }

    return $text;
}

代码运行良好,只是它们仅适用于字符串数据而不适用于二进制类型。我的问题是如何处理二进制类型并将它们推送给客户端?

【问题讨论】:

    标签: php websocket webrtc web-audio-api


    【解决方案1】:

    我真的不明白你想要做什么。 WebRTC 可用于创建 Peer2Peer 连接。因此,您将使用您的 PHP 服务器作为信号服务器。除非因为无法建立 p2p 连接而需要转发,否则实际数据不会传递到您的服务器。那是你想做的吗? 否则,创建一个 RtcPeerConnection 并按照 webrtc 的意图从对等发送数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2011-08-31
      • 2013-07-05
      • 1970-01-01
      相关资源
      最近更新 更多