在不下载整个文件的情况下,从s3获取ogg音轨的长度



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

有信头或我能读的东西吗。甚至可能是比特率,我可以用文件大小除以它来获得大致的播放长度?

不幸的是,似乎没有实现这一点的方法。

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

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

采样率存储在Identification Header(第一个标头数据包)中。请参阅规范,转至"4.2标头解码和解码设置"

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

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

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

最新更新