如何在不下载整个文件的情况下获得 ogg 文件的播放长度?我知道这是可能的,因为 HTML5 标签和 VLC 都可以在加载 URL 后立即显示整个播放长度,而无需下载整个文件。
是否有标题或我可以阅读的内容。甚至可能是比特率,我可以将其除以文件大小以获得大致的播放长度?
不幸的是,似乎没有办法实现这一目标。
Mozilla 的为 Ogg 媒体配置服务器非常有指导意义。基本上:
X-Content-Duration
标头 -如果有,则由Web 服务器发送。这解释了您提出的 HTML5 音频流示例。如果失踪,那么Content-length
采样率存储在标识报头 - 第一个报头数据包中。请参阅规范转到“4.2 标头解码和解码设置”部分
这是可能的。这样做的方法是使用HTTP 范围请求来获取文件的末尾,找到最后一个 Ogg 页面,并从中提取时间戳。这是假设文件由具有相同长度的连续流(即没有链接)组成,并且流时间从 0 开始(否则,您应该解码流的开头并从最终时间戳中减去该时间戳) . 从 Ogg Page granulepos 字段中解码时间戳是特定于编解码器的(例如,对于 Vorbis,它表示为多个样本)。
或者,如果您的 Ogg 文件具有Ogg Skeleton元数据,您可以直接读取该元数据以确定文件的持续时间。
如果不下载数据本身,这是不可能的。您可以将相关信息指定为相关密钥的 S3 元数据的一部分。因此可以在实际下载数据之前写入以自省元数据。