发现个奇怪的问题,Chrome 在播放 flac 时,无法根据播放时长计算该请求 flac 文件的第几个字节,只能通过不断下载,来试探有没有到达目标的时间节点。
有人遇到过类似的问题吗?更见鬼的是,Firefox 上就没有这个问题。
[注] chrome 是最新版的 119.0.6045.160
请求的是相同的 flac 文件,响应头 content-type = audio/flac
破案了,问了个做流媒体网站的网友,他说是因为 Chrome 没有考虑到 flac 的 SEEKTABLE 为空的情况:
flac 有一个 seek table 记录了 seek point <-> byte range 的对应关系,这个元数据不是必要的。
按理来说,音频应当:
如果 flac 音频却提供了一个空的 seek table,将导致浏览器行为异常,进入 fallback
metaflac --list D:\docker_volumes_root\nginx\static\flac\06_DDD-OD.flac
METADATA block #0
type: 0 (STREAMINFO)
is last: false
length: 34
minimum blocksize: 4096 samples
maximum blocksize: 4096 samples
minimum framesize: 1407 bytes
maximum framesize: 20134 bytes
sample_rate: 96000 Hz
channels: 2
bits-per-sample: 24
total samples: 353775343
MD5 signature: d6e8bfcb7c040b54db777e5574032fa3
METADATA block #1
type: 4 (VORBIS_COMMENT)
is last: false
length: 40
vendor string: reference libFLAC 1.1.3 20130526
comments: 0
METADATA block #2
type: 3 (SEEKTABLE)
is last: true
length: 0
seek points: 0 # flac 文件提供了空的 SEEKTABLE
1
ysc3839 361 天前 via Android
都是 HTTP/2 请求的吗?
|
2
niubiman 361 天前
flac 文件太大了吧
|
3
hesetiema 360 天前
哥们还去提了一个 bug 吗,哈哈,有意思。但我看有些单词应该是 flac ,不是 falc.
|