Содержание
- Три способа создать видеохостинг: что выбрать под свою задачу
- Сколько стоит свой видеохостинг: считаем по прайсу
- Как создать видеохостинг на готовом открытом движке
- Как создать видеохостинг с нуля: технологический стек
- Практика: собираем минимальный видеохостинг на Node.js и React
- Транскодинг и раздача: чем настоящий видеохостинг отличается от папки с файлами
- Что требует закон от видеохостинга в России
- Чек-лист запуска видеохостинга
- Частые вопросы о создании видеохостинга
- Итог
Видеохостинг своими силами: создание аналога YouTube
Черновик готовит редакция с помощью ИИ. За стандарт издания отвечает главный редактор — Валерий Курземнек.
Создать видеохостинг можно тремя способами: развернуть открытый движок вроде PeerTube или MediaCMS на своём сервере, подключить готовую видеоплатформу с плеером и CDN по подписке или написать сервис с нуля на связке «бэкенд + объектное хранилище + транскодер FFmpeg + HLS-плеер». Выбор упирается в два числа: сколько часов видео вы храните и сколько гигабайт раздаёте зрителям в месяц.
Коротко о том, что разобрано ниже:
- чем различаются три пути и кому какой подходит по деньгам и срокам;
- из чего складывается счёт: хранение, транскодинг, исходящий трафик — с расчётом на 1000 просмотров;
- минимальные требования к серверу под самостоятельный хостинг видео;
- рабочий пример на Node.js и React — от загрузки файла до воспроизведения;
- как устроена нарезка в HLS и почему без адаптивного битрейта платформа «тормозит»;
- когда сервис попадает в реестр аудиовизуальных сервисов Роскомнадзора.
Обновлено в августе 2026 года. Цены и требования сверены с текущими страницами разработчиков — источники названы в тексте.
Три способа создать видеохостинг: что выбрать под свою задачу

Под словом «видеохостинг» люди понимают разное: кому-то нужен закрытый плеер для уроков на своём сайте, кому-то — публичная площадка с каналами, подписками и комментариями, то есть своя версия YouTube с монетизацией авторов. От этого зависит и путь.
| Путь | Что получаете | Срок до первого видео | Кому подходит |
| Готовая платформа по подписке | Плеер, транскодинг, CDN, статистика, защита ссылок — из коробки | Часы | Онлайн-школа, медиа, интернет-магазин: нужно показать видео без собственной разработки |
| Открытый движок на своём сервере | Полноценная площадка с каналами, подписками, модерацией; данные у вас | Дни | Сообщество, корпоративный портал, нишевая площадка |
| Разработка с нуля | Любая логика и монетизация, но всё пишется руками | Недели и месяцы | Продукт с нестандартной механикой, где чужая коробка мешает |
Разработка с нуля выглядит самым «взрослым» вариантом, но именно она чаще всего останавливается на этапе транскодинга: конвертация в несколько качеств и раздача сегментов — это отдельная инженерная система из очереди задач, кодеков и доставки. Поэтому дальше разобраны все три пути, начиная с денег, потому что бюджет отсекает варианты быстрее любых технических аргументов.
Видео — не единственный тяжёлый тип данных, с которым сталкивается такой проект; общий подход к раскладке файлов по узлам разобран в материале о распределённом хранении данных.
Сколько стоит свой видеохостинг: считаем по прайсу
Счёт за видео складывается из трёх статей: хранение файлов, транскодинг (перекодирование исходника в набор качеств) и исходящий трафик к зрителю. Порядок цифр удобно смотреть по опубликованному прайсу российской видеоплатформы Kinescope: хранение — 1,9 ₽/ГБ за первую 1 000 ГБ и 1,5 ₽/ГБ за следующие 20 000 ГБ; транскодирование — 0,8 ₽ за минуту исходного видео на первых 60 000 минут. CDN-трафик считается лестницей: первые 1 000 ГБ — 1,9 ₽/ГБ, следующие 5 000 ГБ — 1,4 ₽/ГБ, следующие 15 000 ГБ — 1,1 ₽/ГБ, следующие 30 000 ГБ — 0,7 ₽/ГБ. Ступени складываются: 1 000 + 5 000 + 15 000 = 21 000 ГБ, поэтому на объёме 20 000 ГБ ещё работает ставка 1,1 ₽/ГБ, а 0,7 ₽/ГБ включается только после 21 000 ГБ. Бесплатный тариф там даёт «Хранение до 100 минут видео» и «200 ГБ трафика в месяц», платный начинается «от 700 ₽ /мес».
Переведём это в понятную единицу — стоимость одного ролика. Возьмём видео на 10 минут в 1080p при битрейте 4 Мбит/с: такой файл весит около 300 МБ (4 Мбит/с × 600 с = 2400 Мбит ≈ 300 МБ). Дальше — арифметика по тем же тарифам.
| Статья расхода | Как считается | Итог |
| Транскодинг, разово | 10 минут × 0,8 ₽ | 8 ₽ |
| Хранение, за месяц | 0,3 ГБ × 1,9 ₽ | 0,57 ₽ |
| 1000 полных просмотров | 1000 × 0,3 ГБ × 1,9 ₽ | 570 ₽ |
Видно главное: хранение почти ничего не стоит, а платите вы за просмотры. Ролик, который посмотрели 100 000 раз, стоит уже десятки тысяч рублей трафика — независимо от того, чей это сервер. Отсюда практический вывод: экономику видеохостинга держат битрейт и глубина просмотра, а цена диска в этом счёте почти не участвует. Снижение битрейта с 4 до 2,5 Мбит/с при том же разрешении убирает 37,5% трафика: 2,5 ÷ 4 = 0,625. Вдвое счёт режет только переход на 2 Мбит/с. Это первая ручка, за которую стоит браться.
Свой сервер меняет структуру счёта, но не отменяет его: вместо оплаты за гигабайт вы платите за канал и за администрирование. Чтобы сравнить два варианта, посчитайте счёт платформы на своём объёме по той же лестнице (в биллинге 1 ТБ — это 1 000 ГБ). 1 ТБ исходящего трафика в месяц: 1 000 × 1,9 = 1 900 ₽. 10 ТБ: 1 000 × 1,9 + 5 000 × 1,4 + 4 000 × 1,1 = 13 300 ₽, в среднем 1,33 ₽/ГБ. 50 ТБ: 1 900 + 7 000 + 16 500 + 29 000 × 0,7 = 45 700 ₽, средняя ставка падает до 0,91 ₽/ГБ. Своя инфраструктура выигрывает с того момента, когда этот счёт перерастает стоимость вашего канала и работы администратора. Универсального порога в терабайтах здесь нет: цену канала задаёт ваш хостинг, и в прайсе видеоплатформы её не найти.
Все расчёты в этом разделе наши: арифметика по опубликованным тарифам Kinescope. Битрейт 4 Мбит/с взят как типичное значение для 1080p и на вашем контенте будет отличаться.
Как создать видеохостинг на готовом открытом движке
Быстрее всего своя площадка поднимается не с чистого листа, а из открытого движка. Три проекта закрывают почти весь спрос.
- PeerTube — федеративная платформа под лицензией AGPL-3.0 (по данным репозитория проекта на GitHub). Разработчики описывают её как «An open code under a free/libre license» и «A federation of interconnected hosting providers», а раздачу трафика разгружает peer-to-peer через WebRTC. Из коробки: адаптивный плеер, плейлисты, подписки, история просмотров, трансляции через RTMP, несколько каналов у автора, аналитика. Установка бесплатна — «PeerTube is freely provided, no need to pay to install it on your server».
- MediaCMS — тоже AGPL-3.0, по описанию репозитория «modern, fully featured open source video and media CMS, written in Python/Django and React, featuring a REST API». Поддерживает «video, audio, image, and PDF files», ролевую модель доступа, встроенный триммер и разбивку на главы, режимы публикации «Public, unlisted, private workflows». Позиционируется как «Self-host on your infrastructure with complete control over your data».
- Owncast — лицензия MIT, узкая специализация: «free and open source live video and web chat server for use with existing popular broadcasting software». Инструмент заточен под прямые эфиры со встроенным чатом; библиотеку роликов с каналами на нём не собрать.
Какой сервер нужен под собственный видеохостинг
Требования удобно брать у PeerTube — они опубликованы в FAQ проекта и дают честный ориентир для любого self-hosted решения. Минимум: «1 vCore», «1.5 GB of RAM», «Enough storage for videos» и «20Mbit/s upload network speed». Для нагрузки порядка тысячи одновременных зрителей рекомендуется «4 vCore», «4 GB of RAM», «1Gbit/s upload network speed». Если транскодинг крутится на той же машине, планка поднимается до «8 vCore» и «8 GB of RAM»: в документации прямо сказано «Transcoding is very cpu intensive». Про хранилище там же: «If you want to store many videos on your PeerTube instance, you may want to store videos externally using Object Storage».
Смысл этих цифр простой: 1,5 ГБ памяти хватит, чтобы движок запустился и отдал пару роликов, но как только появляется очередь на перекодирование, в потолок упирается процессор. Планируйте отдельный узел под транскодинг с первого дня, иначе первая же волна загрузок положит отдачу видео зрителям.
Как создать видеохостинг с нуля: технологический стек
Если готовые движки не подходят по логике продукта, платформа собирается из пяти слоёв. Ниже — состав каждого и решения, которые в этих ролях проверены практикой.
Шаг 1: выбор технологического стека
- Backend: Python (Django или Flask), Node.js (Express), FastAPI или Ruby on Rails. Задача слоя — принять загрузку, поставить файл в очередь на обработку и отдать метаданные клиенту.
- База данных: PostgreSQL или MySQL для пользователей, метаданных о видео, сессий. Сами файлы в базе не хранят — только пути и статусы обработки.
- Frontend: HTML, CSS, JavaScript; для динамического интерфейса — React, Angular или Vue.js.
- Очередь задач: Redis или RabbitMQ. Без неё загрузка большого файла блокирует веб-процесс, и сайт перестаёт отвечать во время перекодирования.
Шаг 2: обработка и хранение видеофайлов
- FFmpeg — рабочая лошадь любого видеохостинга: конвертация, сжатие, обрезка, миниатюры, нарезка на сегменты для потоковой раздачи.
- Объектное хранилище с S3-совместимым API — для самих файлов. Локальный диск сервера годится только на время прототипа: он не резервируется и не масштабируется вместе с ростом библиотеки.
Шаг 3: аутентификация и безопасность
Механизм входа собирается на OAuth2 или JWT. Пароли — только в виде хешей, весь обмен — по HTTPS, обновления зависимостей — регулярные. Отдельный пункт для видео: прямые ссылки на файлы в хранилище закрывают подписанными URL с ограниченным сроком жизни, иначе платный контент утекает копированием адреса из панели разработчика браузера.
Шаг 4: управление контентом и аккаунтами
- Модерация: очередь проверки загруженного, правила блокировки, журнал решений. Автоматическая проверка по хешам известных нарушений экономит модератору часы.
- Профили и каналы: загрузка, редактирование, организация роликов, настройки приватности, подписки.
Шаг 5: взаимодействие и общение
- Комментарии, оценки, обратная связь — то, что превращает библиотеку файлов в площадку.
- Подписки и уведомления о новых роликах. На этом слое площадка начинает удерживать зрителя.
Практика: собираем минимальный видеохостинг на Node.js и React
Мы будем использовать технологический стек, который включает Node.js для бэкенда, React для фронтенда. Мы также будем использовать базу данных SQLite для простоты.
Шаг 1: подготовка окружения
- Убедитесь, что у вас установлен Node.js и npm (Node Package Manager) на вашем компьютере.
- Создайте папку для проекта, перейдите в нее через терминал:
| «`bash
mkdir micro-video-hosting cd micro-video-hosting «` |
- Инициализируйте проект, создайте файл `package.json`:
| «`bash
npm init -y «` |
Шаг 2: создание бэкенда
- Установите необходимые пакеты для бэкенда:
| «`bash
npm install express sqlite3 cors «` |
- Создайте файл `server.js` для бэкенда:
| «`javascript
const express = require(‘express’); const cors = require(‘cors’); const sqlite3 = require(‘sqlite3’).verbose(); const app = express(); const port = process.env.PORT || 5000; app.use(cors()); app.use(express.json()); const db = new sqlite3.Database(‘./videos.db’, (err) => { if (err) { console.error(‘Database connection error:’, err.message); } else { console.log(‘Connected to the database.’); } }); // Здесь вы можете создать необходимые роуты для загрузки, получения и управления видео. app.listen(port, () => { console.log(`Server is running on port ${port}`); }); «` |
- Создайте файл `videos.db` для SQLite базы данных.
Шаг 3: создание фронтенда
- Установите необходимые пакеты для фронтенда:
| «`bash
npx create-react-app client cd client npm install axios «` |
- Создайте компоненты для загрузки или просмотра видео.
Вот пример компонента для загрузки видео (`VideoUpload.js`):
| «`javascript
import React, { useState } from ‘react’; import axios from ‘axios’; function VideoUpload() { const = useState(null); const handleVideoUpload = async (e) => { e.preventDefault(); const formData = new FormData(); formData.append(‘video’, video); try { await axios.post(‘http://localhost:5000/upload’, formData, { headers: { ‘Content-Type’: ‘multipart/form-data’, }, }); alert(‘Video uploaded successfully’); } catch (error) { console.error(‘Error uploading video:’, error); } }; return ( <div> <h2>Upload Video</h2> <form onSubmit={handleVideoUpload}> <input type=»file» accept=»video/*» onChange={(e) => setVideo(e.target.files[0])} /> <button type=»submit»>Upload</button> </form> </div> ); } export default VideoUpload; «` |
- Создайте компонент для отображения видео (`VideoPlayer.js`):
| «`javascript
import React from ‘react’; function VideoPlayer({ videoUrl }) { return ( <div> <video controls width=»400″ src={videoUrl} /> </div> ); } export default VideoPlayer; «` |
Шаг 4: связывание фронтенда и бэкенда
На этом этапе важно наладить взаимодействие между клиентской (фронтенд), серверной (бэкенд) частями приложения. Вам нужно будет реализовать API-роуты для обработки загрузки видеофайлов, их хранения, а также получения информации о видео и его воспроизведения на клиенте.
Реализация API для загрузки
Бэкенд: настройка обработки
На стороне сервера необходимо создать маршрут для загрузки видео. В зависимости от используемого стека технологий можно воспользоваться:
- Express (Node.js) – если сервер написан на Node.js
- Django (Python) – если используется Django Rest Framework
- FastAPI (Python) – если нужна высокая скорость обработки
Пример API на Node.js + Express с использованием Multer для загрузки файлов:
const express = require(«express»);
const multer = require(«multer»);
const path = require(«path»);
const app = express();
const upload = multer({ dest: «uploads/» });
app.post(«/upload», upload.single(«video»), (req, res) => {
if (!req.file) {
return res.status(400).send(«Файл не загружен»);
}
res.json({ message: «Видео успешно загружено», filePath: `/uploads/${req.file.filename}` });
});
app.listen(5000, () => console.log(«Сервер запущен на порту 5000»));
Этот код создает сервер на Express, который принимает видеофайл через POST-запрос, сохраняет его в папке uploads/ и возвращает путь к файлу.
Настройка фронтенда для загрузки видео
На клиентской стороне (React/Vue/Angular) необходимо создать форму для загрузки видеофайлов и отправки их на сервер.
Пример загрузки видео в React с помощью fetch:
Транскодинг и раздача: чем настоящий видеохостинг отличается от папки с файлами

Пример выше отдаёт mp4 целиком через статику. Для демонстрации этого достаточно, для сервиса — нет: зритель на мобильном интернете ждёт первый кадр, пока не докачается заметный кусок файла, а при просадке канала видео встаёт. Настоящая раздача устроена иначе — файл режется на короткие сегменты и выкладывается в нескольких качествах, а плеер сам переключается между ними.
Как нарезать видео в HLS
Стандартный инструмент нарезки — тот же FFmpeg. В его документации у HLS-мультиплексора есть опция hls_time: «Set the target segment length. Default value is 2» — то есть по умолчанию поток режется на сегменты по две секунды, и рез делается на ближайшем ключевом кадре после этой отметки. Из этого следуют два практических правила: задавать интервал ключевых кадров принудительно (иначе длина сегментов «поплывёт») и держать длину сегмента одинаковой во всех качествах, иначе переключение будет с рывком.
Лестница качеств
Каждый исходник перекодируется в набор дорожек — например, 1080p, 720p, 480p и 360p с разными битрейтами. Плеер получает плейлист-манифест со списком вариантов и выбирает подходящий по фактической скорости канала. Это и есть adaptive bitrate: технология, из-за отсутствия которой самодельные платформы выглядят «медленными» рядом с крупными сервисами при одинаковом железе.
Плеер и CDN
На фронтенде HLS воспроизводят через готовые плееры — Video.js, hls.js, Plyr; писать свой смысла нет, вся сложность там в обработке сетевых сбоев. Раздачу берёт на себя CDN: сегменты кешируются на узлах ближе к зрителю, и ваш сервер отдаёт файл один раз, дальше копии живут на узлах сети. Без CDN исходящий канал сервера становится потолком аудитории задолго до того, как закончится место на диске.
Мини-вывод: транскодинг в несколько качеств, HLS-нарезка и CDN — три обязательных элемента. Пропустить можно только один из них и только на этапе, пока платформу смотрят десятки человек.
Что требует закон от видеохостинга в России
Технической части мало: публичная площадка с чужим контентом попадает в правовое поле сразу, а часть обязанностей включается по размеру аудитории.
- Реестр аудиовизуальных сервисов. Статья 10.5 закона № 149-ФЗ описывает владельца аудиовизуального сервиса как владельца сайта, страницы, информационной системы или программы, которые используются «для формирования и (или) организации распространения в сети «Интернет» совокупности аудиовизуальных произведений, доступ к которым предоставляется за плату и (или) при условии просмотра рекламы». Норма применяется, если доступ к ним «в течение суток составляет более ста тысяч пользователей сети «Интернет», находящихся на территории Российской Федерации». Такой реестр ведёт Роскомнадзор.
- Ограничение на иностранное участие. Та же статья ограничивает долю: иностранное юридическое лицо или российское юрлицо с долей иностранного участия в уставном капитале более двадцати процентов не могут владеть более чем двадцатью процентами долей в таком сервисе без согласования.
- Персональные данные. Регистрация пользователей означает обработку персональных данных: нужны политика обработки, согласие при регистрации и хранение баз на серверах в России.
- Чужой контент. Механизм приёма жалоб правообладателей и быстрого снятия ролика лучше закладывать в архитектуру сразу — как отдельную роль модератора и журнал решений; почтовый ящик для жалоб эту задачу не закрывает. Что считается нарушением при использовании сгенерированных материалов, разобрано в материале об авторском праве на ИИ.
Порог в сто тысяч пользователей в сутки отсекает большинство нишевых проектов, но остальные пункты работают с первого зарегистрированного пользователя.
Чек-лист запуска видеохостинга
- Сформулировать тип площадки: закрытый плеер для своего сайта, сообщество с каналами или сервис прямых эфиров.
- Посчитать месячный трафик: количество роликов × средний вес × ожидаемые просмотры. Именно это число и выбирает путь.
- Проверить открытые движки: PeerTube — сообщество и федерация, MediaCMS — медиатека с ролями доступа, Owncast — эфиры.
- Заложить объектное хранилище с S3-совместимым API и отдельный узел под транскодинг.
- Собрать конвейер: загрузка → очередь → FFmpeg → лестница качеств → HLS → CDN → плеер.
- Закрыть прямые ссылки подписанными URL с ограниченным сроком жизни.
- Добавить модерацию, приём жалоб и журнал решений.
- Оформить политику обработки персональных данных и согласие при регистрации.
- Снять базовые метрики: время до первого кадра, доля буферизаций, глубина просмотра.
- Выполним базовые задачи на российских нейросетях и посмотрим на результаты!
- Файл-инструкцию «Как сделать нейро-фотосессию из своего фото бесплатно, без иностранных карт и прочих сложностей»
- Покажем 10+ способов улучшить свою жизнь с ИИ каждому — от ребенка и пенсионера до управленца и предпринимателя
- Возможность получить Доступ в Нейроклуб на целый месяц
- Как ИИ ускоряет работу и приносит деньги
- За 2 часа вы получите четкий план, как начать работать с ИИ прямо сейчас!
Частые вопросы о создании видеохостинга
Сколько стоит создать свой видеохостинг?
Софт может быть бесплатным: PeerTube и MediaCMS распространяются под AGPL-3.0, Owncast — под MIT. Платите вы за трафик и мощности. По опубликованному прайсу Kinescope хранение стоит 1,9 ₽/ГБ на первой тысяче гигабайт, транскодирование — 0,8 ₽ за минуту исходного видео, CDN-трафик — от 1,9 до 0,7 ₽/ГБ в зависимости от объёма. Тысяча полных просмотров десятиминутного ролика в 1080p при битрейте 4 Мбит/с даёт около 300 ГБ трафика, то есть примерно 570 ₽ по верхней ступени тарифа.
Можно ли создать видеохостинг без программирования?
Да, если не писать движок самому. Открытые платформы вроде PeerTube и MediaCMS ставятся на сервер по инструкции разработчиков, а готовые видеоплатформы подключаются к сайту вставкой кода плеера. Программирование понадобится только для нестандартной логики: своей монетизации, интеграции с внешней системой или необычного интерфейса.
Какой сервер нужен для видеохостинга?
Разработчики PeerTube называют минимумом 1 vCore, 1,5 ГБ оперативной памяти, достаточный объём хранилища и канал 20 Мбит/с на отдачу. Для примерно тысячи одновременных зрителей рекомендуется 4 vCore, 4 ГБ памяти и канал 1 Гбит/с, а если на той же машине идёт транскодинг — 8 vCore и 8 ГБ памяти, поскольку перекодирование сильно нагружает процессор.
Чем HLS лучше обычного файла mp4?
HLS режет видео на короткие сегменты и хранит несколько качеств одного ролика, а плеер переключается между ними по фактической скорости канала. В FFmpeg длина сегмента задаётся опцией hls_time, значение по умолчанию — 2 секунды. Обычный mp4 отдаётся одним файлом в одном качестве, поэтому на слабом соединении зритель ждёт загрузку и видит остановки.
Нужно ли регистрировать видеохостинг в Роскомнадзоре?
Обязанности владельца аудиовизуального сервиса по статье 10.5 закона № 149-ФЗ наступают, когда доступ к аудиовизуальным произведениям предоставляется за плату или при условии просмотра рекламы, а доступ к ним в течение суток составляет более ста тысяч пользователей сети «Интернет», находящихся на территории Российской Федерации. Реестр таких сервисов ведёт Роскомнадзор. Требования о персональных данных и о снятии контента по жалобам правообладателей действуют независимо от размера аудитории.
Итог
Порядок действий сводится к одному правилу: сначала посчитайте трафик, потом выбирайте технологию. Пока счёт платформы на вашем объёме держится ниже стоимости своего канала и администратора, выгоднее готовая платформа; для сообщества со своими правилами — открытый движок на своём сервере, а разработка с нуля оправдана там, где продукт живёт за счёт нестандартной механики. Техническое ядро во всех трёх случаях одно: очередь загрузок, FFmpeg, лестница качеств, HLS и CDN.

