Может ли протокол `dat` эффективно поддерживать потоковую передачу видео в реальном времени?

Я хотел бы иметь возможность транслировать потоковое видео (или любой другой файл, который большой и постоянно изменяется / добавляется) через dat,

Здесь говорится,

Протокол dat:// не поддерживает частичные обновления на уровне файлов, что означает, что при наличии нескольких записей в одном файле каждый раз, когда пользователь добавляет запись, каждый, кто следует этому пользователю, должен синхронизировать и повторно загрузить всю файл. Поскольку файл продолжает расти, производительность будет ухудшаться. Поместить каждую запись в отдельный файл гораздо эффективнее: при создании записи одноранговые узлы в сети будут загружать только что созданный файл.

Однако здесь также сказано, что dat использует снятие отпечатков Рабина для создания детерминированных фрагментов файлов, так что, предположительно, клиент dat сможет легко идентифицировать фрагменты, которые он уже загрузил по их хэшу, и поэтому должен иметь возможность загружать только последний финальный фрагмент файла, если это это единственная часть, которая изменилась.

А также здесь в faq, это говорит:

Тип дерева Merkle, используемый Dat, позволяет партнерам сравнивать, какие части определенной версии набора данных у них есть, и эффективно обмениваться дельтами для полной синхронизации.

Существует гипервизия, но из моего элементарного понимания того, как он работает, похоже, что он сохраняет свой собственный файл "bundle.js" для видеоданных, я не уверен, как он достигает потоковой передачи, но это не совсем то же самое, что то, что я пытаюсь достичь, - это возможность эффективно передавать произвольно большой и расширяемый файл, например видеопоток.ts или.mkv.

Итак, мой вопрос - эффективна ли прямая трансляция видео (т.е. без повторной загрузки уже загруженных фрагментов), то, что просто в настоящее время не поддерживается и может быть добавлено в будущем, или это то, что по своей сути недостижимо при использовании dat протокол?

1 ответ

Короче говоря, низкоуровневый протокол HyperCore, на котором построен Dat, должен хорошо работать для видео и других потоковых потоков "мягкого реального времени". Тем не менее, абстракция гипердвигателя файла / каталога, на которой основывается Dat (приложение), в настоящее время не подходит для этих случаев использования. Ничто не мешает HyperDrive работать с одним "произвольно большим и расширяющимся файлом", но он не был оптимизирован для этого конкретного варианта использования.


Насколько я знаю, все текущие прототипы потокового видео работают путем кодирования видеосодержимого непосредственно в HyperCore, а не в гипердвигательной абстракции "файлы и каталоги". Это похоже на разницу между записью необработанных байтов на жесткий диск вместо использования файловой системы. P2P видео и аудио потоков были явными целями дизайна для HyperCore. Обратите внимание, что могут быть или не быть прямые сопоставления с существующими форматами файлов или потоковыми протоколами; гиперкорная абстракция представлена ​​в виде потока байтовых блоков, каждый из которых ограничен размером около мегабайта.

В качестве небольшой детали, протокол dat / hypercore и форматы на диске не определяют какой-либо конкретный механизм "чанкинга". Экспонирование по принципу Рабина было экспериментировано, но по умолчанию почти все клиенты вместо этого используют фиксирование по фиксированному размеру для простоты и скорости (что не означает, что в будущем невозможно будет реализовать эффективную фрагментацию с учетом локальных особенностей). Теоретически клиенты смогут обнаружить дубликаты фрагментов в любом случае и избежать повторной загрузки (и дублирования хранилища на диске), но эта оптимизация не была реализована по состоянию на лето 2018 года.

В настоящее время Hyperdrive требует, чтобы все файлы были сохранены в виде непрерывных фрагментов в ленте HyperCore "контент". Это очень эффективно, но затрудняет дедупликацию. В особом случае должна быть возможность поддержки добавления к самому последнему файлу (который добавляется непосредственно в фид контента) без копирования всего файла. Каждый раз, когда любой другой файл в ленте обновляется или создается, это нарушит непрерывный фрагмент, но для вашего случая использования он может быть достаточно хорошим (если бы эта оптимизация должна была быть реализована).

Другие вопросы по тегам