愚蠢的解决方案:没有JS的直播服务器推流

2020-09-29 17:18:03

所以在我的帖子里这是邪恶的吗?我介绍了一种使用CSS跟踪用户的方法。在思考那些奇怪的网络使用方式的同时,我也开始考虑向没有JS的客户推送实时数据。或者至少保持联系。所以WebSockets需要JS。WebRTC需要JS。即使是HLS(视频流),本来会非常酷,但带有可访问性的字幕。但是没有。或者更确切地说,可能是在苹果平台上。嗯。还不够好。

然后我突然想到。从一些古老的神经项目中我看到,只将JPEG帧流作为视频发送是有标准的。MJPEG。你知道MJPEG吗?很多人不这么做,很多网络摄像头和安全摄像头都在使用它。Raspberry Pi Hack的常见选项也是如此。MJPEG非常简单,这是它的一大优势。

但视频是我们所期待的。我是去找别的东西的。因此,这可以用于配置项状态灯,显示任何数量的可视状态信息。我用它来做这个:

那么MJPEG是如何工作的呢?那么,您可以使用<;img>;标签,并将MJPEG URL放入其中。好了。

好的,你就是这么用的。而不是它的运作方式。我在万灵丹中实现了它,万灵丹在保持状态和服务更新方面做得很好。链接如下。但基本上,浏览器打开连接,接收一些头和一些数据块,然后意识到它是在处理MJPEG。然后,它就会期待大块不断地到来。无限期的。因为这是现场直播。一帧接一帧的JPEG格式。

MJPEG标题和分块的基本代码是从Nuros团队制作的圆周率相机回放中提取的。片中有很多弗兰克·亨莱斯和康纳·里格比的镜头,所以一如既往地为这些人赢得了赞誉。这就是我用它做的:LAWIK/MJPEG。

因此,我收到连接,然后调用我的MjpegExample GenServer来持久化连接,并跟踪如何向该连接通知新数据。它还会触发更新以通知所有已连接的用户。

这不是抛光的,它是用锤子敲打在一起的,我很好奇下次我遇到相当多的流量时,它会不会掉下来。

我真的很喜欢这种方法,因为它是一种有趣的技巧,只是碰巧可以跨浏览器使用,而且在这方面做得相当好。我喜欢它只是一个img元素,没有华而不实。我添加了惰性加载,因为这与Google LighTower分数和加载体验(您的浏览器不会花几秒钟时间考虑加载图像)之类的东西一起工作得更好。

不幸的是,除了有趣和烦人的东西外,实际使用它绝对是一个糟糕的选择。没有很好的方法来使用它来实现可访问性。您可以更新像素,仅此而已。除非您可以在IFRAME中分块流式传输txt文件。我还没试过呢……。

当然,就像CSS跟踪一样,这也可以用来做坏事。您完全可以跟踪别人接收您的帧的持续时间,并将其用于您的分析。我还发现它很棒,它让我了解并发用户。我只是在发送的同时记录这个数字,因为出于好奇心,我想知道它破到什么数字,但是你可能会用这个做一些轻微的不愉快的事情。哦.。等。你可以用这个投放轮流广告。你知道你发送的最后一帧是什么,所以如果你点击它,你就可以把那个特定的用户引导到正确的东西。新标题:广告投放完全没有JS,呃,不用了,谢谢。继续前进。

如果你知道如何让这件事变得更肮脏、更有趣、更有趣,甚至更有用或更容易接近,请随时通过[email protected]或Twitter联系,我的地址是i';m@lawik。