我希望能够通过以下方式实时流式传输视频(或任何其他大型且不断修改/附加的文件)dat
.
Here https://github.com/beakerbrowser/webdb#performance它说,
dat:// 协议不支持文件级别的部分更新,
这意味着单个文件中有多个记录,每次
用户添加了一条记录,任何关注该用户的人都必须同步并
重新下载整个文件。随着文件不断增长,
性能会下降。将每条记录放入单独的文件中是
更高效:当创建记录时,网络中的对等点
只会下载新创建的文件。
然而,它也说here https://github.com/datproject/docs/blob/master/docs/how-dat-works.md#phase-3-data-exchange that dat
使用 Rabin 指纹识别来创建确定性的文件块,因此大概 dat 客户端将能够轻松识别已经通过其哈希下载的块,因此应该只能下载文件的最新最终块(如果这样的话)是唯一改变的部分。
并且在常见问题解答中 https://docs.datproject.org/faq#dat-vs, 它说:
Dat 使用的 Merkle 树类型让同行可以比较哪些部分
他们各自拥有的数据集的特定版本并且有效
交换增量以完成完全同步。
有超视距 https://github.com/mafintosh/hypervision,但从我对其工作原理的初步了解来看,它似乎为视频数据保存了自己的“bundle.js”文件,我不确定它是如何实现流式传输的,但这与我的不完全相同我试图实现的目标是能够有效地传输任意大型且扩展的文件,例如 .ts 或 .mkv 视频流。
所以,我的问题是 - 视频的高效实时流传输(即无需重新下载已下载的块)目前根本不支持并且可以在将来添加,或者是使用本质上无法实现的东西dat
协议?
In short,Dat 构建于其之上的低级超核协议应该适用于视频和其他“软实时”流媒体用途。然而,Dat(应用程序)所构建的超级驱动器文件/目录抽象当前不适用于这些用例。没有什么可以阻止超光速引擎与single“任意大且扩展的文件”,但它尚未针对该特定用例进行优化。
据我所知,当前所有视频流原型的工作原理都是将视频内容直接编码到超核中,而不是在超驱动器“文件和目录”抽象中。这有点像将原始字节写入硬盘而不是使用文件系统之间的区别。 P2P 视频和音频流是超核的明确设计目标。请注意,可能存在也可能不存在到现有文件格式或流协议的直接映射;超核抽象以字节块流的形式呈现,每个字节块的上限约为一兆字节。
作为一个小细节,dat/hypercoreprotocol and 磁盘格式不要指定任何特定的“分块”机制。 Rabin 分块已经进行过实验,但默认情况下,几乎所有客户端都使用固定大小的分块,以实现简单性和速度(这并不意味着将来不可能实现高性能的局部敏感分块)。理论上,客户端在任何情况下都能够检测到重复块并避免重新下载(以及磁盘上的重复存储),但截至 2018 年夏季,这种优化尚未实施。
Hyperdrive 目前要求所有文件作为连续块存储在“内容”超核提要中。这非常高效,但使重复数据删除变得困难。作为一种特殊情况,应该可以支持附加到最新的文件(直接附加到内容提要),而无需复制整个文件。每当更新或创建提要中的任何其他文件时,这都会破坏连续的块,但对于您的用例来说,它可能已经足够好了(如果要实现此优化)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)