PHP を使用してファイルから読み取り、ストリーム出力したいと考えています。
私のコードは次のようになります。
teststream.php
$bufsize=4096; // amount of buffer to read at a time.
$h = fopen("test.wav", "rb");
$stdout = fopen("php://stdout", "wb");
while ( !feof($h) ) {
$buf = fread($h, $bufsize);
fwrite($stdout, $buf);
}
pclose( $h );
そして、それを次のようにメディアプレーヤー(VLCなど)に入れたいと思います:
http://www.test.com/teststream.php
このアプローチは機能していません。その理由はわかりません。
---- 更新されたコードは次のようになります。
<?php
$bufsize=4096; // amount of buffer to read at a time.
$h = fopen(dirname(__FILE__)."/test.wav", "rb");
header("Content-Type: audio/x-wav", true);
$stdout = fopen("php://stdout", "wb");
$total=0;
while ( !feof($h) ) {
$buf = fread($h, $bufsize);
$total=$total+strlen($buf);
error_log("buf read: ".strlen($buf).", total: ".$total);
fwrite($stdout, $buf);
}
fclose( $h );
Apache の error_log は次のようになります。
[Wed Oct 30 00:29:12 2013] [error] [client 50.201.227.222] buf read: 4096, total: 4096
[Wed Oct 30 00:29:12 2013] [error] [client 50.201.227.222] buf read: 4096, total: 8192
[Wed Oct 30 00:29:12 2013] [error] [client 50.201.227.222] buf read: 4096, total: 12288
...
...
したがって、データを送信しているように見えますが、VLC 側でオーディオを再生することはありません。VLC をhttp://www.test.com/test.wavにポイントすると、正常に再生されます... ??