我目前正在编写一个 DLNA 服务器,它为诸如 Sonos Play 1 和 3 之类的 DMR 提供流。
根据 HTTP 1.1 规范,当您不知道轨道的实际长度时,不要指定Content-Length
,而只需指定Connection: Close
。这应该使客户端读取流,直到服务器关闭连接。
这适用于 wav 和 flac 流。但是对于 mp3 和 ogg 流,我需要指定 aContent-Length
才能播放。否则,Sonos 客户端只会自行立即关闭连接。就我而言,它是计算机当前播放的实时流。因此不可能知道长度。只要电脑运行,就有内容可以播放。
我目前的解决方案是伪造内容长度并将其设置为荒谬的值(100gb)以使流永远播放。
我想知道这种行为,因为它适用于 wav 和 flac,但不适用于 mp3 和 ogg。
我究竟做错了什么?或者这只是与 HTTP 1.1 规范的偏差?