0

我有媒体文件,如 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);
4

1 回答 1

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++组合。这还允许您跟踪数据库中的发送进度、跟踪交付速度等。实时下载跟踪可能对您有用。freadfclose

但对于其他任何东西(较小的土豆),我使用readfile()。在完成之前它不会给你更新。但它完成了它的工作。

你仍然需要测试。使用 100+ MB 的视频文件并发送。查看内存在 PHP 实例上的表现以及它的整体表现。

于 2013-07-02T15:01:46.907 回答