这是我通过php流式传输mp3文件的php代码
set_time_limit(0);
$dirPath = "path_of_the_directory";
$songCode = $_REQUEST['c'];
$filePath = $dirPath . "/" . $songCode . ".mp3";
$strContext=stream_context_create(
array(
'http'=>array(
'method'=>'GET',
'header'=>"Accept-language: en\r\n"
)
)
);
$fpOrigin=fopen($filePath, 'rb', false, $strContext);
header('content-type: application/octet-stream');
while(!feof($fpOrigin)){
$buffer=fread($fpOrigin, 4096);
echo $buffer;
flush();
}
fclose($fpOrigin);
它适用于Mac Mini和所有其他PC,但不适用于iPad和iPhone。甚至流媒体也适用于所有其他智能手机。感谢您的帮助。
由于
答案 0 :(得分:3)
为什么content-type: application/octet-stream
如果是一首歌?更改标题:
set_time_limit(0);
$dirPath = "path_of_the_directory";
$songCode = $_REQUEST['c'];
$filePath = $dirPath . "/" . $songCode . ".mp3";
$strContext=stream_context_create(
array(
'http'=>array(
'method'=>'GET',
'header'=>"Accept-language: en\r\n"
)
)
);
$fpOrigin=fopen($filePath, 'rb', false, $strContext);
header('Content-Disposition: inline; filename="song.mp3"');
header('Pragma: no-cache');
header('Content-type: audio/mpeg');
header('Content-Length: '.filesize($filePath));
while(!feof($fpOrigin)){
$buffer=fread($fpOrigin, 4096);
echo $buffer;
flush();
}
fclose($fpOrigin);
LE:已移除Content-Transfer-Encoding
并将Content-Disposition
从attachment
更改为inline
答案 1 :(得分:3)
<?php
set_time_limit(0);
$dirPath = "path_of_the_directory";
$songCode = $_REQUEST['c'];
$filePath = $dirPath . "/" . $songCode . ".mp3";
$bitrate = 128;
$strContext=stream_context_create(
array(
'http'=>array(
'method'=>'GET',
'header'=>"Accept-language: en\r\n"
)
)
);
header('Content-type: audio/mpeg');
header ("Content-Transfer-Encoding: binary");
header ("Pragma: no-cache");
header ("icy-br: " . $bitrate);
$fpOrigin=fopen($filePath, 'rb', false, $strContext);
while(!feof($fpOrigin)){
$buffer=fread($fpOrigin, 4096);
echo $buffer;
flush();
}
fclose($fpOrigin);
我知道这篇文章来自去年,但有人可能会觉得这很有用。这将流式传输内容。
答案 2 :(得分:1)
我知道这已经过时了,但我们只是碰到了与iOS相同的问题。
基本上,如果您的应用使用原生播放器来阅读文件,您需要为您的文件实施接受范围和 206部分内容读。
在我们的案例中,发生的事情是该文件总共有4分钟。该应用程序将播放约1分50秒,然后将循环回到开始。它不会检测文件的总长度 即使我们将Accept-Ranges设置为none,iOS也忽略了它,并且仍然要求部分文件。既然我们正在回归整个事情,那就是&#34;循环&#34;回到下一个&#34;范围&#34;读取。
为了实现部分内容,我们使用了https://mobiforge.com/design-development/content-delivery-mobile-devices,附录A:Thomas Thomas为Apple iPhone流式传输
我希望这有助于某人