Ворует стрим с твича
Для работы требуется создать файл config.json, некоторые поля в нём обязательны.
TwitchStatuser
через опрос api твича и пабсаб следит за статусом стрима.
Когда стрим онлайн, StreamsManager
запускает StreamHandler
, который запускает StreamDownloader
, который уже грузит сегменты в хранилище.
Хранилище это либо локальный диск, либо s3 ведро от тайм веб, либо вольюм от do. Третье требует, чтобы вор был запущен на дроплете. Поскольку не локальный диск будет доступен не сразу, сначала идёт загрузку в кеш файл, который перенесётся в хранилище.
После того, как StreamsManager
определит, что стрим закончился, будет создан StreamFinisher
, который загрузит видео куда нужно. Также он создаёт название для видео и его описание, основываясь на играх и тайтлах стрима.
"Куда нужно" это либо локальный диск, либо вк.
При этом, если добавлен ffmpeg, загрузка будет идти не сразу куда нужно, а сначала в ffmpeg, конвертируя .ts формат в .mp4. Ютуб обрабатывал .ts видео по несколько дней, а .mp4 несколько часов. Так что лучше конвертировать, если будет идти загрузка куда-то.
Если нужно, стрим будет поделён на несколько видео по длине/размеру. Например, на ютубе ограничение по длине видео 12 часов.
Если всё загрузится успешно, место "куда нужно" будет удалено.
По умолчанию вор будет ждать ещё час переподруб стрима. Команда finish завершает ожидание. (Вводить в консоль)
Если во время стрим случится переподруб со сменой качества, итогое видео будет поделено на до и после. Потому что при конвертации происходит смена контейнера, а не содержимого, так что вместе 30 и 60 фпс лучше не мешать.
Загрузка стрима можно идти либо анонимно, либо от имени аккаунта. Второе имеет смысл, если есть сабка. Тогда стрим будет качаться без рекламы.
Есть поддержка уведомлений на почту. Будет писать, успешно или нет закончилась загрузка стрима.
1 секунда стрима 1080p60 весит примерно 1МБ. То есть 1 час стрима 3.6ГБ. Для таймвеба по умолчанию создаётся ведро на 100ГБ, чего должно хватит на 27 часов.
Сегменты стрима хранятся либо в одном файле (локально, вольюм), либо каждый в своём файле (S3 ведро). Нарезка на видео происходит уже после стрима. Для этого создаётся база данных в CachedData, которая хранит информацию о сегментах.
Ещё вор считает, сколько стоит его работа. 9 рублей за 6 часов стрима, ага.
Раньше была поддержка выгрузки видева на ютуб. Но я её убрал, потому что переделывал систему загрузки, а на ютубе я уже был забанен (Не связано с загрузкой). Да и вообще, чтобы загружать туда видео, нужно иметь верифицированный апп, что требует прыжков через горящие кольца.
Мне лень расписывать, удачи в жизни. Всю эту информацию можно найти.
Вернуть бы аплоадер на ютуб. Добавить бы поддержку вёдер от Digital Ocean. Добавить бы нормальную дозагрузку, если не получилось загрузить. Создавать бы хранилища размером поменьше, расширяя при необходимости. С S3 ведром полегче, с вольюмом посложнее.