【问题标题】:How can I write a binary response in php bit by bit?如何在php中一点一点地编写二进制响应?
【发布时间】:2014-09-08 00:28:18
【问题描述】:

我想用 php 即时输出一个 mp3 文件,以便我可以尝试使用 html5 音频标签进行 voip 呼叫。我打算在指向我的 php 文件的 html 文档中使用 mp3 音频标签,该文件会即时生成 mp3 数据。部分 mp3 标头仅以 2 位编码。我研究了pack(),但它似乎只支持打包成字节。我可以将标头组合成 8 位,但我真的希望能够一点一点地写入流。有没有办法在 php 中做到这一点,还是我必须编写一个 java/c++ 服务器来获得这种低级控制?

更新

所以经过一些研究,似乎由于 tcp/ip 的限制(实际限制)和 php 管道的工作方式,使用 php 颠覆逐字节传输实际上并不可行。

【问题讨论】:

  • 您不能发送 2 位。您需要创建至少一个字节来发送。这些位的其余字节是什么?
  • 对于一个大文件/流,将文件分成字节并不是不合理的,但我不想遇到结束流并不得不随机生成 7 位的问题送走说我最后的孤独。
  • 为什么要发送单个位?这没有意义。大多数协议,包括 TCP,一次只允许发送一个字节。

标签: php stream bit


【解决方案1】:

像这样:取“一个”随机字节,设置想要的位,打包。

$random_byte = mt_rand(0, 255); // it's not real one byte. But pack would truncate to it.
$last_bit = 1; //
$random_byte_with_last_bit = $random_byte | $last_bit;
var_dump(sprintf('%08b', $random_byte_with_last_bit));
$result = pack('C', $random_byte_with_last_bit);

【讨论】:

    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 2015-12-14
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多