AVStream.ru — Новости

13-05-2025

Немного про то, как я делал Стримометр - супер сервис, котор

Немного про то, как я делал Стримометр - супер сервис, котор
Немного про то, как я делал Стримометр - супер сервис, который умеет мониторить входящий стрим по битрейту, фпс и прочим метрикам, рестримить его в 4 дырки, принимать RTMP / SRT, и в случае обвала потока вставлять картинку-заглушку, демонстрирующуюся зрителям пока продакшен не починит трансляцию. Параллельно он еще запись тусы делает на хард, размещается в облачном датацентре, и непринуждённо привязывается к домену вашего продакшена.

Кто не видел Стримометр, тут видос, тут простыня, тут гитхаб.

Стримометр я сделал пол года назад за 2 месяца в одну каску не написав ни строчки кода и потратив 100 долларов в рублёвом эквиваленте.

Делал я его в сервисе Bolt

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

Главное что я понял при работе с такими сервисами - поэтапность. Бессмысленно просить "создать крутую приложуху чтобы SRT гоняло туда-сюда". Сначала перед работой надо у себя в голове построить схему приложения, и поэтапно ее релизовывать, не забывая сохранять все версии проектов.

Мой стартовый промт был вот такой:

Create a detailed design and functionality plan for a web service that receives an RTMP video+audio stream from a user, does not modify it, and allows the user to forward the same stream to another RTMP address. The service must include the following features and visual layout:
Core Functionality:
Accept an RTMP input stream from the user.
Allow the user to specify the destination RTMP URL and RTMP KEY for output.
Provide a "Start Streaming" button that begins forwarding the stream to the specified address without any modifications.
Visual Layout:
Top Left: An embedded player to display the incoming RTMP stream in real-time.
Top Right: Two input fields for the user to enter the destination RTMP URL and RTMP KEY, accompanied by a "Start Streaming" button.
Bottom Section: Real-time analytics for the incoming RTMP stream, displayed using graphs and visual indicators. These should include:
Bitrate (real-time updates).
Frame rate (real-time updates).
Resolution of the stream.
Video and audio codecs being used.
Audio sample rate and duration of both receiving and forwarding streams.
Audio channel configuration (e.g., mono, stereo).
Audio codec details.
Design Guidelines:
The interface must use a dark theme with a clean and minimalist layout.
Graphs and analytics should be updated in real-time.
Ensure a professional and user-friendly design, suitable for streaming applications.
Он структурирован через чатгпт, потому что на тот момент мой мозг не умел так структурировать промты. Теперь умеет)

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

Самым сложным этапом была картинка-заглушка. Я хотел сделать мини-микшер внутри сервиса, который бы оперативно подменял поток при его обрыве. Параллельно я мучал чатгпт, но тот вообще не понимал что мне от него нужно с этим fallback image. В итоге сделал, а как - не скажу, в коде на гитхабе посмотрите 🙂

Кстати, картинку-заглушку так никто и не внедрил в свои сервисы, хотя юзеры от нее пукают ромашками.

Суть моего посыла - в идее. И некотором упорстве для ее достижения. Сейчас иишные инструменты позволяют создать не просто тупого тг бота, а уже довольно сложные сервисы, которые могут пригодиться вам в вашей работе. Единственная инвестиция от вас - это ваше время и небольшое количество денег в токены.

Ну и если вас вдруг цепануло и вы захотели создать свой Фейскаст, или рулилку vMix, или плейаут, или записывалку SRT потоков, или брендовый рестример, или хз что, то сначала сядьте, и крепко декомпозируйте ваш проект до винтика. Сначала крупными мазками, потом всё мельче и мельче. И начинайте. Реально разрабы уже всё меньше нужны чтобы воплощать разные идеи.

P.S. если будете делать что-то видяшное через Bolt, то удобно скачивать весь проект себе на комп, через Visual Studio его открывать и локально запускать, а в болте уже код генерить и копировать его в файлы на локалке.
vMixNDISRTRTMPстрим