1

我刚刚编写了一个基于 Web 的 flv 文件下载实用程序。当我尝试下载 flv 文件时,浏览器没有显示进度条,因为我没有看到剩余的下载时间。我在某处读到,如果您尝试下载的 flv 文件没有与之关联的元标记,则会发生这种情况。因此,我通过 Perl 模块FLV::Info运行了我的 flv 文件,我看到存在元标记标头。

下面是我看到的 flv 文件的元标记示例:

File name          0.360730744040669.flv
File size          167 bytes
Meta               1 event
  canSeekToEnd     1
  filesize         167
  metadatacreator  FLV::File v0.22
  metadatadate     Wed Feb  4 17:00:07 2009

有人有什么想法吗?

4

3 回答 3

3

您的 Web 服务器可能没有正确设置 Content-length 标头或类似的东西。

你的文件真的只有 167 字节吗?这似乎有点小。

于 2009-02-05T07:30:46.237 回答
1

正如 jrockway 所说,它可能是 Content-Length 标头 - 我不确定 Firefox 是否默认提供轻松访问,但Live HTTP Headers插件为您提供访问权限,如果您不使用 Firefox,则可以使用Wireshark代替(但它要重得多,并且可能需要一些混乱才能在其余网络流量中找到标头)。一旦您可以看到此标头是否已设置(如果已设置,则它是否是正确的值),您将了解有关如何继续的更多信息。

在从其他站点下载 flv 文件时,验证您是否获得了进度条是值得的,一旦发生这种情况,您就可以开始查看示例文件与正常运行的文件之间的差异。

如果在下载过程中使用文件的内容(FLV::Info 获取其详细信息的地方)来计算进度,我会感到有些惊讶。

于 2009-02-05T08:31:26.600 回答
0

您阅读的有关元数据的内容可能与 Flash 播放视频的方式有关。Flash 需要元数据来了解电影的长度。这就是元数据通常放在文件开头的原因。在对 H264 视频进行编码时,元数据通过 ffmpeg 等工具放置在文件的末尾,为了让“流媒体”正常工作,您需要将其移到开头。

然而,这应该不会对浏览器中的进度条产生任何影响,这很可能是因为,例如,youtube 没有在标题中设置 Content-Length。

于 2009-02-05T10:17:13.717 回答