从S3获取OGG音轨的长度而不必下载整个文件

10
如何在不下载整个文件的情况下获取ogg文件的播放长度?我知道这是可能的,因为HTML5标签和VLC都可以在加载URL后立即显示整个播放长度,而无需下载整个文件。是否有头文件或其他内容可供阅读?也许是比特率,我可以将其除以文件大小以获取大致的播放长度?

你打算如何读取所述的ogg文件?此外,你将对该文件进行什么操作 - 仅提取信息并显示吗? - Jesse
3个回答

10
很遗憾,似乎没有办法实现这个。
Mozilla的为Ogg媒体配置服务器非常有指导性。基本上:
  1. Gecko使用由web服务器发送的X-Content-Duration头 - 如果它有的话。这解释了你提出的HTML5音频流示例。如果缺失,则
  2. Gecko 根据采样率(在头部中)和Content-length HTTP头文件的大小估计长度。
采样率存储在标识标头中 - 第一个标头包。请参见规范转到“4.2头解码和解码设置”部分。

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

0

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


2
必须是可能的。HTML5的<audio>标签能够立即获取音频文件的持续时间,而无需下载整个文件... - priestc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接