我在页面上有服务器的mp4,ogg等媒体文件。但问题是由于某些安全原因文件虽然是媒体文件但没有任何扩展名。 所以Apache无法识别mime类型,因此html5视频标签无法播放视频。
我的选择是什么?
因为我没有任何扩展名,.htaccess
不起作用。
如果我将文件扩展名放在名称中,那么它就开始工作了。
此外,我有这些文件的mime类型存储在数据库中。
文件结构:
asdsad/media
werewr/media
23frwe/media
//where media is the file ( could be mp4/ogg/webm) with no extension.
// before / is folder name
// If i change media to media.mp4 , it works
.htaccess文件
AddType video/ogg .ogv .ogm .ogg
AddType audio/ogg .oga .ogg
AddType video/mp4 .mp4
AddType video/webm .webm
AddType video/x-m4v .m4v
AddType text/x-vcard .vcf
如果我从php输出文件而不是从localpath链接它怎么办? 它会起作用吗? 像这样的东西。
header("Content-type: video/mp4");
echo file_get_contents($pathTmp4);
答案 0 :(得分:0)
<?php
// tell the browser the file type
header("Content-type: video/mp4");
// tell the browser the file size
header(sprint("Content-size: %d", filesize($pathTmp4)));
// disable output buffering before delivering the file
while(ob_get_level()) ob_end_clean();
// send it over
readfile($pathTmp4);
// done, track speed and such optional stuff here
?>
考虑readfile
。将直接输出绕过file_get_contents
内存中的负载。
或者只是打开文件并使用fread
发送数据块。 在发送之前永远不要将整个内容加载到内存中。
<强>更新强>
就速度而言,您需要进行测试。这将绕过.htaccess问题,因为它使用PHP来吐出文件。这允许您控制标题并将适当的类型提供给浏览器。下行是仅提供文件的PHP开销。
对于fopen
+ fread
+ fclose
组合,我个人会,因为我们正在讨论大型视频文件。这还允许您跟踪数据库中的发送进度,跟踪交付速度等。 实时下载跟踪可能对您有用。
但对于其他任何(较小的土豆),我使用readfile
()。在完成之前它不会给你更新。但它确实发挥了作用。
你还需要测试。使用100+ MB的视频文件并发送。了解内存在PHP实例上的表现以及它的整体行为。