10

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

是否有标题或我可以阅读的内容。甚至可能是比特率,我可以将其除以文件大小以获得大致的播放长度?

4

3 回答 3

10

不幸的是,似乎没有办法实现这一目标。

Mozilla 的为 Ogg 媒体配置服务器非常有指导意义。基本上:

  1. Gecko 使用X-Content-Duration标头 -如果有,则由Web 服务器发送。这解释了您提出的 HTML5 音频流示例。如果失踪,那么
  2. Gecko根据采样率(在标头中)和来自HTTP 标头的文件大小估计长度Content-length

采样率存储在标识报头 - 第一个报头数据包中。请参阅规范转到“4.2 标头解码和解码设置”部分

于 2013-02-27T10:06:06.870 回答
2

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

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

于 2013-04-29T19:02:32.267 回答
0

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

于 2013-02-25T04:20:45.423 回答