Обычная ловушка большого медиа
Наивное хранилище зашифрованных чанков часто имеет уродливый путь чтения: собрать весь файл в память или временный объект, а потом дать браузеру или инструменту превью искать внутри этой копии. Это жрёт RAM, диск, время и терпение оператора.
- Превью видео не должно требовать пересборки всего файла.
- Приостановленное скачивание не должно читать с нулевого байта заново.
- Объектное хранилище не должно заставлять заводить кэш на весь файл ради обычных range-чтений.
Логический поток поверх чанков
Cotton собирает один перематываемый поток из нескольких потоков чанков. Перемотка находит целевой чанк по накопленным смещениям и переключает нижележащий поток чанка, чтобы чтение продолжилось с правильного физического куска.
Range-ответы
Та же форма потока обслуживает HTTP Range-запросы и частичные скачивания. Результат для продукта простой: большие файлы читаются кусками, а не становятся передачей объекта целиком каждый раз.
Извлечение превью
Генерация превью видео может указывать FFmpeg на локальный мост потока с поддержкой range. FFmpeg просит метаданные и кадры через диапазоны байтов, а Cotton не пишет полный временный исходный файл.
Сжатие и шифрование усложняют всё
Перемотка — не простая конкатенация обычных файлов. Cotton должен сохранить аутентификацию AES-GCM на каждый чанк, дисциплину nonce, порядок сжатия, границы чанков и параллельные range-чтения без доверия неаутентифицированным байтам.
Доказательство пути перемотки
Конкретная форма чтения: смещения манифеста находят чанки, логический поток перематывается к цели, процессоры читают через бэкенд, крипто и декомпрессию, а вызывающий получает обычный поток или ответ HTTP Range.
Медиа остаётся пригодным к использованию
Это разница между движком хранения и настоящим файловым облаком. Файл может быть большим, зашифрованным, разбитым на чанки, пригодным для превью, расшариваемым — и всё равно читаемым по срезам.
Не обещание всех кодеков на свете
Перематываемые чтения чанков дают основу для побайтового доступа. Поддержка кодеков в браузере, наличие FFmpeg, повреждение файла, поведение клиента и производительность развёртывания всё равно решают, получится ли у конкретного медиафайла превью и воспроизведение.