更正PHP http流的标头和mime_type

时间:2015-04-17 22:02:05

标签: php html5 audio http-headers

我已经和它斗争了几天了。我似乎无法通过PHP获得任何东西。我正在尝试通过php播放.m4a音频文件,它所做的就是在Chrome中显示HTML5播放器,但该文件无法加载。

我在这里尝试过其他帖子中的大量技巧,似乎没有任何区别。

这是一些后端信息。

运行H264 Streaming module的PHP-FPM的Apache / Linux服务器。 在vhost文件中添加了AddType audio/mp4 m4a

使用ffmpeg编码的所有文件都是.m4a,并使用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的响应标头。 (不玩)

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的响应标头。 (播放正常)

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脚本,它完全符合我的需要,而且运行完美。

https://github.com/tuxxin/MP4Streaming

2 个答案:

答案 0 :(得分:1)

我终于放弃了这段代码。我在GitHub上发现了一个PHP脚本,它完全符合我的需要,而且运行完美。

https://github.com/tuxxin/MP4Streaming

我需要音频,所以在这个新脚本中,我刚刚将video/mp4更改为audio/mp4

答案 1 :(得分:0)

标题实际上是相同的,所以这不是你的问题。

我怀疑问题在于您说您接受范围请求,但您的代码中没有任何地方实际上是在尊重这些范围请求。