猿问

多部分/x-混合-替换 PNG 流始终在最后一个之前显示帧

制作了一个程序,通过标题将PNG图像流式传输到浏览器,我注意到标签中只显示倒数前的帧,而不是最近发送的帧。multipart/x-mixed-replaceContent-Type<img>

这种行为非常烦人,因为我仅在图像更改时发送更新以节省带宽,这意味着在我等待更新时屏幕上会出现错误的帧。

具体来说,我正在使用Brave浏览器(基于chromium),但是由于我已经尝试了上下两个“shields”,因此我认为至少在其他基于chromium的浏览器中也会出现此问题。

搜索问题只产生一个相关结果(以及许多不相关的结果),即这个HowToForge线程,没有回复。同样,我也认为问题与缓冲有关,但我确保刷新缓冲区无济于事,这与线程中的用户非常相似。用户确实报告说它在他们的一个服务器上工作,而不是在另一个服务器上工作,这使我相信它可能与特定的HTTP标头或类似的东西有关。我的第一个猜测是因为浏览器可以从中分辨出图像何时完成,但它似乎没有任何影响。Content-Length

所以从本质上讲,我的问题是:有没有办法告诉浏览器显示最新的多部分/ x-mixed-replace而不是之前的那个?而且,如果这不是标准行为,原因可能是什么?

当然,这是相关的源代码,尽管我认为这更像是一个通用的HTTP问题,而不是与代码有关的问题:

翻阅古今
浏览 104回答 3
3回答

守着星空守着你

多部分 MIME 邮件中的部分以 MIME 标头开头,以边界结尾。在第一个实部之前有一个边界。此初始边界关闭了 MIME 前导码。相反,您的代码假定部件以边界开头。基于此假设,首先发送边界,然后发送 MIME 标头,然后发送 MIME 正文。然后停止发送,直到下一部分准备就绪。因此,只有在发送下一个部件后,才会检测到一个部件的末端,因为只有这样,您才会发送前一个部件的结束边界。若要解决此问题,代码最初应发送一个边界来结束 MIME 前导码。然后,对于每个新部件,它应发送 MIME 标头、MIME 正文,然后发送边界以结束此部件。

哔哔one

我有同样的问题:使用时有1帧延迟multipart/x-mixed-replace这个问题似乎出现在Chrome中,它似乎与Chrome不再支持资源的事实有关。此问题在 Firefox 中不存在。multipart/x-mixed-replace因此,“诱骗”Chrome显示视频流的唯一方法是将每个图像发送两次或接受1帧延迟。如前所述,问题在Firefox中不存在。

慕沐林林

这是Chrome的一个问题。在Firefox中,它按预期工作。我通过以下方式解决了这个问题C# examplevar&nbsp;chromeWorkaround&nbsp;=&nbsp;Encoding.UTF8.GetBytes($"\r\n--{Boundary}\r\n\r\n--{Boundary}\r\n");将其附加到您的流中,它似乎会强制镶边立即呈现。我在这里报告了:https://bugs.chromium.org/p/chromium/issues/detail?id=1250396
随时随地看视频慕课网APP

相关分类

Go
我要回答