CottonПерематываемые чанки
Перематываемые чанки

Перемотка внутри зашифрованного видео. Без расшифровки всего файла.

Range-чтения идут через чанки AES-GCM. Теги аутентификации на каждый чанк проверяют срез на лету. Без временного файла, без полного скачивания. Большинство self-hosted облаков сначала расшифровывают всё на диск; Cotton собирает диапазон байтов прямо из зашифрованного хранилища.

Range-чтенияСцепленные потокиИзвлечение превью через FFmpegЗашифрованные чанкиБез полной пересборки

Обычная ловушка большого медиа

Наивное хранилище зашифрованных чанков часто имеет уродливый путь чтения: собрать весь файл в память или временный объект, а потом дать браузеру или инструменту превью искать внутри этой копии. Это жрёт RAM, диск, время и терпение оператора.

  • Превью видео не должно требовать пересборки всего файла.
  • Приостановленное скачивание не должно читать с нулевого байта заново.
  • Объектное хранилище не должно заставлять заводить кэш на весь файл ради обычных range-чтений.

Логический поток поверх чанков

Cotton собирает один перематываемый поток из нескольких потоков чанков. Перемотка находит целевой чанк по накопленным смещениям и переключает нижележащий поток чанка, чтобы чтение продолжилось с правильного физического куска.

Range-ответы

Та же форма потока обслуживает HTTP Range-запросы и частичные скачивания. Результат для продукта простой: большие файлы читаются кусками, а не становятся передачей объекта целиком каждый раз.

Извлечение превью

Генерация превью видео может указывать FFmpeg на локальный мост потока с поддержкой range. FFmpeg просит метаданные и кадры через диапазоны байтов, а Cotton не пишет полный временный исходный файл.

Сжатие и шифрование усложняют всё

Перемотка — не простая конкатенация обычных файлов. Cotton должен сохранить аутентификацию AES-GCM на каждый чанк, дисциплину nonce, порядок сжатия, границы чанков и параллельные range-чтения без доверия неаутентифицированным байтам.

Доказательство пути перемотки

Конкретная форма чтения: смещения манифеста находят чанки, логический поток перематывается к цели, процессоры читают через бэкенд, крипто и декомпрессию, а вызывающий получает обычный поток или ответ HTTP Range.

Медиа остаётся пригодным к использованию

Это разница между движком хранения и настоящим файловым облаком. Файл может быть большим, зашифрованным, разбитым на чанки, пригодным для превью, расшариваемым — и всё равно читаемым по срезам.

Не обещание всех кодеков на свете

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

Доказательство Range

Браузер просит байты. Cotton не должен пересобирать мир.

Интересно не то, что чанки существуют. Интересно, что Cotton отдаёт полезный кусок из зашифрованного чанкового хранилища и при этом не ломает обычный конвейер хранения.

Зашифрованные чанки с произвольным доступомСмещения манифеста, чтения из бэкенда, стадии расшифровки и распаковки и ответы Range позволяют читать большие зашифрованные файлы кусками.
01manifest offsets
02chunk lookup
03seek target
04backend read
05decrypt chunk
06decompress
07range response

Без временного исходного файла

Скачивание и инструменты превью читают куски без пересборки всего объекта заранее.

Перемотка медиа работает

Чтения с поддержкой диапазонов дают видеоплеерам и генераторам превью тот доступ к байтам, которого они ждут.

Аутентифицированные чанки

Произвольный доступ всё равно проходит теги AES-GCM на каждый чанк и раскладку nonce до того, как байтам можно доверять.

Форма, нейтральная к бэкенду

Абстракция потока может сидеть поверх чанков файловой системы или S3-совместимого объектного хранилища.

Что получает медиа

Большие файлы читаются кусками, а не только полным скачиванием.

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

  • Смещения манифеста связывают логические байты с физическими чанками.
  • Произвольный доступ переключает активный чанковый поток на нужном смещении.
  • Чтения идут обратно через бэкенд, шифрование и распаковку.
  • FFmpeg может использовать мост с поддержкой диапазонов для извлечения превью.
  • Браузеры и клиенты могут продолжать скачивание или перематывать через HTTP Range.
  • Поддержка кодеков и доступность генераторов всё ещё честные ограничения.
Вопросы

Прямые ответы

Cotton собирает весь файл перед range-запросом?

Нет. Перематываемый путь чтения собирает запрошенные байты из сохранённых чанков как логический поток, так что range-скачивания и превью не требуют полного временного исходного файла.

Как это помогает превью видео?

FFmpeg может запросить нужные части через мост потока с поддержкой range. Это помогает извлечению постера и превью старых видео без предварительной конвертации или полной пересборки исходника.

Шифрование не делает перемотку небезопасной?

Может, если сделать небрежно. Заявление Cotton скромнее: хранилище с аутентификацией на каждый чанк может поддерживать перемотку, если конвейер сохраняет границы чанков, правила nonce/аутентификации и порядок процессоров.