【问题标题】:Non-dynamic custom HTTP headers非动态自定义 HTTP 标头
【发布时间】:2011-03-15 01:09:37
【问题描述】:

根据这个Mozilla article on Ogg media,媒体在浏览器中的工作更加无缝,带有X-Content-Duration 标头,以秒为单位给出长度。

假设我将该长度存储在某处(当然在数据库中,也可能在文件名本身中(video-file-name.XXX.ogv,其中XXX 是以秒为单位的时间)),有没有办法使用只有 Apache .htaccess 设置?我问是因为将文件加载到 PHP 脚本中似乎很笨拙,尤其是当 PHP 默认添加其他禁用缓存的标头,并且不会正确响应范围(部分内容)请求时。是的,可以用 PHP 编写很多代码来支持 ETag 和范围请求,但是当 Apache 内置了所有这些功能时,仅仅添加一个标头就做所有这些似乎有点过头了。

【问题讨论】:

  • 我看到这个想法的一个问题是文件的长度(以秒为单位或其他)不是文件的大小。

标签: php apache video audio html


【解决方案1】:

这是mod_cern_meta 的域。它允许为文件静态分配额外的 HTTP 标头。

您可以使用 cron 作业,并为每个视频生成一个 *.meta 文件。

【讨论】:

  • @TRiG:这是一个相当古老的模块,可能来自于 Apache 之前的时代。但这可能是修改标头最有效的解决方案。
  • 我做了一些测试并让它工作,所以我决定这样做。预计工作流程:1 用户上传视频或音频文件。 2 PHP 调用 FFmpeg 来查找有关媒体文件的各种信息(容器、编解码器、持续时间)。 3 PHP 调用 FFmpeg 以创建 HTML5 所需的所有格式的文件版本(除非原始上传已经是一种这样的格式,在这种情况下我们要做的工作会少一些)。 4 PHP 使用它之前从 FFmpeg 获得的“持续时间”信息来为每个 Ogg 文件创建 .meta 文件。我还没有开始使用上传器!
【解决方案2】:

我没有示例,但您应该能够使用 mod_header 在 .htaccess 级别指定 HTTP 响应标头。

当然,我应该在哪里添加标题的问题实际上取决于您如何访问它。如果您只是点击静态资源进行下载,那么通过 Apache 添加它是有意义的。但是,您提到了数据库。如果您决定将这些文件存储在数据库中,那么您有一些 API 提供该文件,在这种情况下,API 实现应该附加标头而不是卸载到 apache。

另外,如果您想要的动态数据需要处理来确定(它不在文件名等中),那么您已经在使用一些代码引擎来实现它,只需添加标题即可。

【讨论】:

  • 视频或音频文件本身最好是静态文件,但嵌入它的 HTML 将由 PHP 编写。
【解决方案3】:

这就是你使用 mod_perl 扩展所做的事情,拦截这些请求并添加额外的标头,然后让 Apache 继续处理它。

可能工作的一种纯 PHP 方法是使用 mod_rewrite 通过 PHP 路由请求,添加额外的标头,然后让 Apache 使用 virtual 函数处理其余部分。 p>

或者,您可以使用持续时间数据库构建静态 .htaccess 文件,该文件使用 mod_header 为每个请求的文件插入正确的持续时间标头。

【讨论】:

  • virtual() 函数看起来很吸引人,感谢您将我的注意力吸引到我一无所知的 PHP 上,但我决定使用 mod_cern_meta
猜你喜欢
  • 2012-01-17
  • 2012-09-22
  • 1970-01-01
  • 2018-09-26
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2011-03-11
相关资源
最近更新 更多