为 PHP http 流更正 headers 和 mime_type
Correct headers and mime_type for PHP http streaming
几天来我一直在和这个问题作斗争。我似乎无法通过 PHP 播放任何内容。我正在尝试通过 php 播放 .m4a
音频文件,它所做的只是在 Chrome 中显示 HTML5 播放器,但文件未加载。
我尝试了这里其他帖子的许多技巧,但似乎没有什么不同。
这是一些后端信息。
Apache/Linux 服务器 PHP-FPM 运行 H264 Streaming module。
AddType audio/mp4 m4a
被添加到 vhost 文件中。
所有文件都是.m4a
用ffmpeg编码的,并使用ffmpeg中的-c:a aac -strict experimental
作为音频编解码器。文件本身直接在浏览器中播放得很好,只是不通过 PHP。有趣的是,当我将 mime 更改为 audio/acc 时,它在浏览器中播放,但通过 quicktime 播放器播放。我需要它是原生的 HTML5 m4a。
这是我正在尝试使用的 PHP 代码。我已经尝试了很多组合,包括使用 Content-Disposition 但它会尝试下载并保存它。我不想那样。
$size = filesize($realfile);
$mimes = "audio/mp4";
if(file_exists($realfile)){
header('Accept-Ranges: bytes');
header('Content-Length: ' . $size);
header('Content-Range: bytes 0-'.($size - 1).'/'.$size);
header('Content-Type: '.$mimes);
readfile($realfile);
}else{
header("HTTP/1.1 403 Forbidden");
}
这是使用 PHP URL 的响应 headers。 (不玩)
Accept-Ranges:bytes
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Length:3340918
Content-Range:bytes 0-3340917/3340918
Content-Type:audio/mp4
Date:Fri, 17 Apr 2015 21:47:21 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips mod_fcgid/2.3.9
X-Powered-By:PHP/5.5.22
这是直接来自文件 URL 的响应 headers。 (播放正常)
Accept-Ranges:bytes
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Length:3340918
Content-Range:bytes 0-3340917/3340918
Content-Type:audio/mp4
Date:Fri, 17 Apr 2015 21:29:04 GMT
ETag:"32fa76-5139745cc934f"
Keep-Alive:timeout=5, max=100
Last-Modified:Mon, 13 Apr 2015 08:55:15 GMT
Server:Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips mod_fcgid/2.3.9
如果对此有任何帮助,那就太好了。
编辑:我终于放弃了这段代码。我在 GitHub 上找到了一个 PHP 脚本,它完全符合我的需要,而且运行良好。
headers 实际上是相同的,所以这不是你的问题。
我怀疑问题是你说你接受范围请求,但你的代码中没有任何地方真正尊重这些范围请求。
我终于放弃了这段代码。我在 GitHub 上找到了一个 PHP 脚本,它完全符合我的需要,而且运行完美。
https://github.com/tuxxin/MP4Streaming
我需要音频,所以在这个新脚本中我只是将 video/mp4
更改为 audio/mp4
。
几天来我一直在和这个问题作斗争。我似乎无法通过 PHP 播放任何内容。我正在尝试通过 php 播放 .m4a
音频文件,它所做的只是在 Chrome 中显示 HTML5 播放器,但文件未加载。
我尝试了这里其他帖子的许多技巧,但似乎没有什么不同。
这是一些后端信息。
Apache/Linux 服务器 PHP-FPM 运行 H264 Streaming module。
AddType audio/mp4 m4a
被添加到 vhost 文件中。
所有文件都是.m4a
用ffmpeg编码的,并使用ffmpeg中的-c:a aac -strict experimental
作为音频编解码器。文件本身直接在浏览器中播放得很好,只是不通过 PHP。有趣的是,当我将 mime 更改为 audio/acc 时,它在浏览器中播放,但通过 quicktime 播放器播放。我需要它是原生的 HTML5 m4a。
这是我正在尝试使用的 PHP 代码。我已经尝试了很多组合,包括使用 Content-Disposition 但它会尝试下载并保存它。我不想那样。
$size = filesize($realfile);
$mimes = "audio/mp4";
if(file_exists($realfile)){
header('Accept-Ranges: bytes');
header('Content-Length: ' . $size);
header('Content-Range: bytes 0-'.($size - 1).'/'.$size);
header('Content-Type: '.$mimes);
readfile($realfile);
}else{
header("HTTP/1.1 403 Forbidden");
}
这是使用 PHP URL 的响应 headers。 (不玩)
Accept-Ranges:bytes
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Length:3340918
Content-Range:bytes 0-3340917/3340918
Content-Type:audio/mp4
Date:Fri, 17 Apr 2015 21:47:21 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips mod_fcgid/2.3.9
X-Powered-By:PHP/5.5.22
这是直接来自文件 URL 的响应 headers。 (播放正常)
Accept-Ranges:bytes
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Length:3340918
Content-Range:bytes 0-3340917/3340918
Content-Type:audio/mp4
Date:Fri, 17 Apr 2015 21:29:04 GMT
ETag:"32fa76-5139745cc934f"
Keep-Alive:timeout=5, max=100
Last-Modified:Mon, 13 Apr 2015 08:55:15 GMT
Server:Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips mod_fcgid/2.3.9
如果对此有任何帮助,那就太好了。
编辑:我终于放弃了这段代码。我在 GitHub 上找到了一个 PHP 脚本,它完全符合我的需要,而且运行良好。
headers 实际上是相同的,所以这不是你的问题。
我怀疑问题是你说你接受范围请求,但你的代码中没有任何地方真正尊重这些范围请求。
我终于放弃了这段代码。我在 GitHub 上找到了一个 PHP 脚本,它完全符合我的需要,而且运行完美。
https://github.com/tuxxin/MP4Streaming
我需要音频,所以在这个新脚本中我只是将 video/mp4
更改为 audio/mp4
。