MP4视频在通过php readfile()后未在MAC上的Quicktime中播放

MP4视频在通过php readfile()后未在MAC上的Quicktime中播放,php,video-streaming,readfile,Php,Video Streaming,Readfile,我花了好几天的时间寻找这个问题的解决方案,但我尝试的都不管用。情况如下:我们在Cloudfront上托管了大量视频,并通过我们的网站进行流媒体传输。(工作起来很有魅力) 高级会员需要获得下载部分视频的选项,但是,我们无法显示实际的URL。出于这个原因,我们设置了以下脚本,它从我们的Cloudfront URL读取视频并通过服务器传递,这样可以有效地隐藏其位置 奇怪的是:虽然这对一些视频来说效果不错,但其他视频(使用相同的编码)不会在苹果的Quicktime播放器中播放,因为这种格式无法识别。如果

我花了好几天的时间寻找这个问题的解决方案,但我尝试的都不管用。情况如下:我们在Cloudfront上托管了大量视频,并通过我们的网站进行流媒体传输。(工作起来很有魅力)

高级会员需要获得下载部分视频的选项,但是,我们无法显示实际的URL。出于这个原因,我们设置了以下脚本,它从我们的Cloudfront URL读取视频并通过服务器传递,这样可以有效地隐藏其位置

奇怪的是:虽然这对一些视频来说效果不错,但其他视频(使用相同的编码)不会在苹果的Quicktime播放器中播放,因为这种格式无法识别。如果我用VLC打开这个文件,它工作得非常好,但苹果却出了问题

当然,我尝试直接从它的URL下载该文件,它在Quicktime中运行良好。此外,直接下载和读取文件passthru中的头都是相同的

不过,正如我所说,其他分辨率较低的视频使用脚本也能很好地工作。不过,我找不到任何理由说明决议会对这一点产生影响。其他一切都是平等的。视频以H.264格式编码并存储在MP4容器中

我能做些什么来解决这个问题

非常感谢

header('Content-Description: File Transfer');
header('Content-Type: video/mp4'); //tried multiple options here, none work
header('Content-Disposition: attachment; filename=asciifriendly-filename.mp4');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: 1234567890'); //this number IS correct. 100%
ob_clean();
flush();

readfile ( $url );  //points to Cloudfront server

您是否查看了文件内部,以查看是否有任何PHP错误消息扰乱了流?您是否验证了用户获得了完整且正确的文件?例如,意思是他们的md5哈希匹配。是的。。。。谢谢你指出这一点。如果文件大小太大,脚本会抛出警告。显然,我已经测试过了,但只测试了较小的文件。谢谢大家,你们的建议非常有用!