我刚编写了一个基于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
任何想法?
答案 0 :(得分:3)
您的网络服务器可能没有正确设置Content-length标头,或类似的东西。
你的文件真的只有167个字节吗?这似乎有点小。
答案 1 :(得分:1)
正如jrockway所说,它可能是Content-Length标题 - 我不确定Firefox是否提供默认的轻松访问,但是Live HTTP Headers插件可以让你访问,如果你不使用Firefox,你可以使用Wireshark代替(但它更重,可能需要一些麻烦才能在其余的网络流量中找到标题)。一旦你可以看到这个标题是否被设置(如果是,它是否是正确的值),你将了解更多关于如何继续。
当从其他网站下载flv文件时,有必要验证您是否获得进度条,一旦发生这种情况,您就可以开始查看示例文件与行为正常的文件之间的差异。
如果在下载过程中使用文件的内容(FLV :: Info获取其详细信息)来计算进度,我会感到有些惊讶。
答案 2 :(得分:0)
您阅读的有关元数据的内容可能与Flash播放视频的方式有关。 Flash需要元数据才能知道电影的持续时间。这就是元数据通常放在文件开头的原因。编码H264视频时,元数据通过ffmpeg等工具放置在文件末尾,为了使“流”能够正常工作,您需要将其移至开头。
然而,这应该对浏览器中的进度条没有任何影响,更可能的原因是,例如,youtube没有在标题中设置Content-Length。