PHP 流媒体 MP3

标签 php mp3 header filestream readfile

我和提问者的情况很相似: Can I serve MP3 files with PHP? 基本上我试图保护 mp3 文件不被直接下载,因此用户必须首先通过 php 进行身份验证。 这是我的代码:

header('Content-type: audio/mpeg');
header('Content-length: ' . filesize($file));
header('X-Pad: avoid browser bug');
Header('Cache-Control: no-cache');
header("Content-Transfer-Encoding: binary"); 
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
readfile($file);

这是我的问题:该文件仅播放开头的一小部分(通过浏览器中的 Quicktime)然后停止 - Quicktime 似乎认为文件的长度仅与它管理的 block 一样长下载。。当我重新加载时 - 它会播放一个稍大的 block - 无论它到目前为止成功下载的是什么。

我发送的 header 有问题吗?我将如何传输这样的文件? 如果 swf 正在从该文件读取,是否有问题?

谢谢!

<小时/>

谢谢大家的回答。尽管这些事情都不能完全解决问题,但其中许多都给我指明了正确的方向。非常感激。 对于完整的解决方案,请参阅下面我的回答

最佳答案

这就是成功的秘诀。

$dir = dirname($_SERVER['DOCUMENT_ROOT'])."/protected_content";
$filename = $_GET['file'];
$file = $dir."/".$filename;

$extension = "mp3";
$mime_type = "audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3";

if(file_exists($file)){
    header('Content-type: {$mime_type}');
    header('Content-length: ' . filesize($file));
    header('Content-Disposition: filename="' . $filename);
    header('X-Pad: avoid browser bug');
    header('Cache-Control: no-cache');
    readfile($file);
}else{
    header("HTTP/1.0 404 Not Found");
}

关于PHP 流媒体 MP3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2358253/

相关文章:

PHP MVC : Data Mapper pattern: class design

php - 如何将 MySQL 代码转换为 PDO 语句?

php - 有关表单和 php 的问题(清除表单、实时刷新、多行)

php - 使用PHP将数组一一存储在MySQL中

java - 使用 java 录制流时获取 MP3 标签

android - 单击 TextView 从原始资源播放 mp3 文件

python - 在 Python 中获取 MP3 文件句柄的长度

ruby-on-rails - 下划线在 Rails 标题中转换为连字符?

c++ - 从 header 中的函数生成静态数组值

php - 标题位置 3 次后不起作用