2013-02-25 62 views
9

如何在不下载整个文件的情况下获得ogg文件的播放长度?我知道这是可行的,因为HTML5标签和VLC都可以在加载URL后立即显示整个播放长度,而无需下载整个文件。从s3获取ogg轨道的长度而无需下载整个文件

是否有标题或我能读的东西。也许即使是比特率,我可以通过文件大小来划分它以获得大致的播放长度?

+0

你打算如何阅读所述ogg文件?此外,你将如何处理文件 - 简单地提取信息并显示? – Jesse 2013-02-27 05:55:21

回答

9

不幸的是,似乎没有办法做到这一点。

Mozilla的Configuring servers for Ogg media非常具有启发性。基本上是:

  1. 壁虎采用X-Content-Duration头 - 由送到Web服务器如果它有它。这解释了您提出的HTML5音频流示例。如果缺少,则
  2. 壁虎估计基于所述采样速率(在报头中)的长度和该文件的从Content-length HTTP头

采样率被存储在识别头的尺寸 - 第一个标头数据包。见the specification转到“4.2头解码和解码设置”部分

0

这是不可能没有下载数据本身。您可以将相关信息指定为相关密钥的S3元数据的一部分。因此,在实际下载数据之前,可以写入以反思元数据。

+2

它必须是可行的。 HTML5'

1

这个可能的。这样做的方法是使用HTTP range requests来获取文件的末尾,找到最后一个Ogg页面,并从中提取时间戳。这是假定文件由连续的流组成(即没有链接),它们都具有相同的长度,并且流时间从0开始(否则,应该解码流的开始并从最终时间戳中减去该时间戳) 。解码来自Ogg Page granulepos字段的时间戳是编解码器专用的(例如,对于Vorbis,它表示为多个采样)。

或者,如果您的Ogg文件具有Ogg Skeleton元数据,则可以直接读取该文件以确定文件的持续时间。

相关问题