streaming - 自适应比特率流协议(适用于任何数据)
问题描述
我正在寻找一些关于流协议(类似于视频/音频流)的想法/提示,以实时发送任何数据。
简单来说:
- 我每秒生成一些数据(假设一个数组每秒有 1MB 的数据),并且我将这些数据从最重要到不那么重要进行排序(比如将它们放入优先队列或类似队列)
- 我想通过某种协议继续流式传输这些数据,在完美的情况下我想发送所有这些数据
- 如果不可能(带宽、丢弃数据包等),我想尽可能多地从每个生成的数组发送(第一个 n 字节)只是为了保持数据继续(重要的是每秒开始发送新的生成数组)。
现在 - 我正在寻找可以处理任何数据的自适应比特率内容的协议/库。我希望它告诉我可以发送多少数据(放入发送缓冲区或类似方法)。最类似的事情是视频/音频流,当网络条件差时,(编码器)编码器会根据网络条件改变质量。如果我错过了一些发送数据也可以(所以这些东西的 UDP 深层是可以的)但最好我希望每秒发送尽可能多的数据而不会丢失任何东西(从那些第一个 n 字节发送)。
您对我可以将哪些协议/库用于客户端/服务器有任何想法吗?(希望有一些 Python、C 或 C++ 中的库)。
解决方案
我认为IPFIX(通用 NetFlow 标准)拥有您需要的一切。
您可以通过在每次更改速率时发送samplingInterval更新来避免每个样本的时间戳。您还可以添加其他异步更新采样中的更改。
至于把你的数据放在哪里。您可以创建一个新字段,或者只使用具有您想要的数据类型的现有字段。IE:如果您只是发送 uint64 示例值,那么使用它可能会更容易,packetDeltaCount
然后创建您自己的字段定义。
有很多 IPFIX库。