我有一台服务器从源获取mp3音频缓冲区并通过php将其写入文件。它会截断文件的开头,因此文件大小永远不会超过2 MB。同时,客户端通过寻找到最后并且读取是否有任何新数据来流式传输mp3。问题是当文件被截断时客户端正在读取更改的位置。
这是流式传输音频的客户端:
$handle = fopen('cool.mp3', "r");
$err = fseek($handle, 0, SEEK_END);
while(file_exists($file_lock)){ // cool.mp3.lock means stream is still going
$data = fread($handle, 1024);
echo $data;
ob_flush();
flush();
}
我在服务器上使用它来写入数据:
$data = "audio frames....";
clearstatcache();
$file = 'cool.mp3';
if(filesize($file) > 1024*200){ //2 MB
ftruncatestart($file, 1024*25); //Trim Down By Deleting Front
}
file_put_contents($file, $data, FILE_APPEND);