Repository navigation
Releases: 0rb1ta/Brix
Release list
Brix 0.2.0-beta
English · Русский
Before you update
Nothing to do. The APK is signed with the same key as before and installs over
0.1.x, keeping your settings. Audio settings that older versions stored per stream
profile are moved into the shared audio settings once, on first launch.
What's new
A first-run wizard. On a fresh install the app no longer opens straight into an
empty stream screen. A portrait wizard walks through language, permissions, a server
(or importing one from a brix://, moblin:// or larix:// link) and quality.
Settings offer only what your phone can actually do. At startup the app asks the
hardware which encoders, resolutions and frame rates it supports. Modes your phone
cannot do are not offered, instead of failing on air.
Microphone level meter. Two small vertical bars (left and right channel) sit above
the corner button slot, where most people keep the mute button. They turn red on
clipping and grey while muted. It can be turned off in Settings → Appearance → HUD.
Donation services beyond DonationAlerts. DonatePay, iHAQ, Donatty and donate.stream
widgets are recognised by their address, and the HUD shows a small label per service
that lights up when the widget is actually connected to its server.
Chat emotes. Twitch and Kick emotes are shown as images. 7TV and BetterTTV emotes are
behind a separate switch, because they mean requests to third-party services.
Stop button. Holding Stop now shows a progress ring that starts from the bottom edge,
the colour change and label are animated together, and the phone vibrates on start,
on success and on early release — so you can tell the outcome without looking.
Settings, easier to use on the move. Rows show their current value; every row is at
least 48 dp tall and the whole row toggles a switch; switches are the standard system
ones; number fields open a numeric keyboard; an empty or malformed server address can
no longer be saved silently; "Delete server" is red.
WHIP to http:// servers works. Android blocks unencrypted HTTP by default, so a
WHIP address starting with http:// (MediaMTX's default, a server at home) failed
immediately. It is now allowed — just like RTMP, which never was encrypted — and the
server editor warns that such an address and token travel in the clear.
Fixed
- Bonding did not come up when the first link to connect was dead — for example a
cellular network whose operator blocks UDP, while Wi-Fi worked. Registration was only
attempted through that one link. Every link now tries, and the first to answer wins. - The "Reconnect" button left an SRTLA stream stuck in "reconnecting": the stream
kept going, but the clock stopped, and the next real drop no longer triggered an
automatic reconnect. - Only three of the five reconnect attempts were actually made — one failed
attempt was counted several times. - Plain
srt://died when you walked away from Wi-Fi, even with cellular working:
the second network was discarded at start and never used. It now takes over. - A link that failed to reconnect could spin one CPU core at 100% until the end of
the stream, and stayed dead. - Mute did not mute the microphone in the "microphone + phone audio" scene, and
switching scenes un-muted a muted microphone. - A broken donation image could crash the app on air.
- Camera and audio settings changed during a stream (stabilisation, mirroring,
microphone gain) now apply immediately instead of after Stop → Start. - The mascot redrew the whole screen 60 times a second for the entire stream — more
CPU than our whole network transport. It now only moves briefly on events. - Privacy: the server address no longer appears in exported diagnostics logs; the
name of your headset no longer travels in config links or diagnostics; "Source" in
About now points to the public repository. - Chat: Kick chat answers the server's keep-alive and no longer reconnects every couple
of minutes in a quiet channel.
Under the hood: RootEncoder 2.8.1, Kotlin 2.4, current AndroidX, OkHttp 5, Glide 5.
Still a beta
Everything we know about the app's behaviour still comes from one Samsung S21. There are
no external device reports yet — Settings → About → Device passport collects one and is
the main way to lift that limit.
This release was checked on that phone with an automated test bench — SRTLA, a manual
reconnect, 5% packet loss, a 10-second outage, Wi-Fi switched off and back, plain SRT,
RTMP, WHIP, mute, MP4 recording — including the release-type build. Not verified:
- WHIP sometimes fails to connect (2 of 4 attempts on the bench): the server accepts
the request but the media connection does not come up. If it happens, press Start
again. We are looking into it. - Bonding over a real cellular network — the bench has only one network link.
- Donations from DonatePay and iHAQ have not been seen with a real donation.
- Twitch sign-in is hidden until the app is registered with Twitch. Kick sign-in
needs your own Kick developer app (Client ID and Secret, like VK). - A Bluetooth headset microphone is listed but the app does not switch the headset into
call mode, so recording stays on the built-in microphone.
Installing
Android 10 or newer. Signed with the same key as previous releases, so it installs over
them.
sha256: 3c9f0a6eea35354df30a5e1b06d1e009cb52c55e13e372992ede98fb883d3922
Русский · English
Перед обновлением
Ничего делать не нужно. Подпись та же, обновление встаёт поверх 0.1.x с сохранением
настроек. Звук, который старые версии хранили в каждом профиле стрима, при первом
запуске один раз переносится в общие настройки звука.
Что нового
Мастер первого запуска. При чистой установке приложение больше не открывает сразу
пустой экран эфира. Портретный мастер проводит по шагам: язык, разрешения, сервер (или
импорт по ссылке brix://, moblin://, larix://) и качество.
Настройки предлагают только то, что умеет ваш телефон. При запуске приложение
спрашивает железо, какие энкодеры, разрешения и частоты кадров оно поддерживает.
Недоступные режимы не предлагаются, вместо того чтобы падать в эфире.
Индикатор уровня микрофона. Две вертикальные полоски — левый и правый канал — над
угловым слотом быстрых кнопок, куда обычно ставят мьют. Краснеют при перегрузке,
сереют при мьюте. Выключается в Настройки → Внешний вид → HUD.
Донат-сервисы помимо DonationAlerts. Виджеты DonatePay, iHAQ, Donatty и donate.stream
опознаются по адресу, в HUD у каждого сервиса своя метка, которая горит, когда виджет
действительно подключён к своему серверу.
Эмодзи в чате. Эмодзи Twitch и Kick показываются картинками. 7TV и BetterTTV —
отдельным переключателем: это запросы к сторонним сервисам.
Кнопка «Стоп». При удержании видно кольцо прогресса от нижней грани, смена цвета и
подписи идут вместе, плюс вибрация на начало, на срабатывание и на отпускание раньше
времени — результат понятен, не глядя на экран.
Настройки удобнее на ходу. В строках видно текущее значение; строки не ниже 48 dp и
переключаются целиком; переключатели системные; числовые поля открывают цифровую
клавиатуру; пустой или битый адрес сервера больше не сохраняется молча; «Удалить сервер»
— красная.
WHIP на серверы http:// работает. Android по умолчанию запрещает HTTP без
шифрования, и адрес WHIP вида http:// (MediaMTX по умолчанию, сервер дома) сразу
падал. Теперь разрешено — как у RTMP, который всегда был без шифрования, — а редактор
сервера предупреждает, что такой адрес и токен идут открыто.
Исправлено
- Бондинг не поднимался, если первым подключился мёртвый канал — например, сота,
у которой оператор режет UDP, при работающем Wi-Fi. Регистрация шла только через этот
канал. Теперь пробуют все, побеждает первый ответивший. - Кнопка «Переподключить» оставляла SRTLA-эфир в «переподключении»: поток шёл, но
часы стояли, и при следующем настоящем обрыве автопереподключение не срабатывало. - Из пяти попыток переподключения выполнялись три — одна неудачная попытка
засчитывалась несколько раз. - Обычный
srt://умирал при уходе с Wi-Fi, хотя сота работала: вторая сеть
отбрасывалась на старте и не использовалась. Теперь эфир переезжает на неё. - Канал, не сумевший переподключиться, мог занимать ядро на 100% до конца эфира и
оставался мёртвым. - Мьют не глушил микрофон в сцене «микрофон + звук телефона», а смена сцены
открывала выключенный микрофон. - Битая картинка доната могла уронить приложение в эфире.
- Настройки камеры и звука, изменённые во время эфира (стабилизация, зеркало,
усиление микрофона), применяются сразу, а не после Стоп → Старт. - Маскот перерисовывал весь экран 60 раз в секунду всё время эфира — больше
процессора, чем весь наш сетевой транспорт. Теперь двигается только коротко на
события. - Приватность: адрес сервера больше не попадает в выгрузку диагностики; имя
гарнитуры не уезжает в ссылку с настройками и диагностику; «Исходники» в «О
приложении» ведут на публичный репозиторий. - Чат: Kick отвечает серверу на проверку связи и не переподключается каждые пару минут
в тихом канале.
Внутри: RootEncoder 2.8.1, Kotlin 2.4, свежие AndroidX, OkHttp 5, Glide 5.
По-прежнему бета
Всё, что мы знаем о поведении приложения, по-прежнему получено на одном Samsung S21.
Внешних отчётов пока нет — Настройки → О приложении → Паспорт устройства собирает такой
отчёт, и это главный способ снять ограничение.
Этот выпуск проверен на том телефоне автоматическим стендом — SRTLA, ручное
переподключение, 5% потерь, обрыв на 10 секунд, выключение и включение Wi-Fi, обычный
SRT, RTMP, WHIP, мьют, запись MP4 — в том числе на сб...
Brix 0.1.7-beta
English · Русский
What's new
Nothing new since 0.1.5-beta. These versions exist so that the APK we publish and
the APK F-Droid builds from source can be identical: the build no longer writes the
source commit hash into the package, and no longer embeds Google Play's encrypted
dependency-metadata block, which their scanner refuses because its content cannot be
inspected.
One list of scene widgets instead of two. "Overlays" and "Browser widgets" were
separate screens, and which one a thing belonged to was our internal distinction, not
a meaningful one: one browser-based donation widget went into the first list, another
into the second. There is now a single list, and you pick a type when you add a widget:
donation alert, web page, image, or text.
Image and text widgets do not start a browser at all. Until now, putting a picture
over the video cost a whole WebView — measured at 9–10% of one CPU core per widget,
with a snapshot loop running every 200 ms. The new native types cost essentially
nothing: an image is read once, and a text line is redrawn only when it actually
changes. Text supports {time}, {battery} and {bitrate}.
Your existing overlays and browser widgets are migrated automatically, including which
scenes they belong to.
Donation alerts are laid out as one block. The picture and the caption used to be
two independent overlays with separate geometry, so they drifted apart, shifted near
the frame edge, and the text stretched when the window was resized. They are now glued
into a single image: the picture on top, then the donor's name and amount, then the
message — and the whole block scales together with its window. The caption is also
rendered at the frame's own resolution, so the text no longer blurs on a large window.
Fixed: the placement frame lied about the size by 2.75×. Its box was computed in
pixels but applied as density-independent units, so on a phone with 2.75 density the
frame on screen was nearly three times larger than the share of the frame it saved. A
window dragged out to "half the screen" was stored as 16% of the width, and the alert
came out tiny. The same bug affected the chat panel and browser widgets.
Fixed: no more white flash at startup. The system splash screen took its colour
from a light theme and showed the icon on white before the app's own dark interface
appeared.
An intro animation on launch — a rain of mascot glyphs, drawn by code rather than
played from a file, so it adds nothing to the download size. It plays in landscape:
launching in portrait turned out to need real work in the camera layer (the preview
came out as a narrow, rotated strip), and that is deferred to the first-run wizard,
where portrait is needed anyway.
Snapshot button. Saves the current frame to the gallery — the frame as viewers see
it, with overlays and effects, not a separate camera photo. No permissions needed.
HUD: the cellular link shows the carrier name instead of the word CELLULAR, and the
typography was brought to one system — one style for labels, one for numbers (with
fixed-width digits, so a changing bitrate no longer nudges its neighbours), one for
link names. Icons are one size instead of three.
Also: dialogs are compact instead of the material default that took half the screen
in landscape; a deletion dialog now names what is being deleted and colours the
dangerous button; the mascot's blink no longer looks like a stray open eye.
Still a beta
Everything we know about this app's behaviour still comes from a single Samsung S21.
There are no external device reports yet — Settings → About → Device passport collects
one and is the main way to lift that limit.
Not verified on a device in this release: the image and text widget types on air, and
the settings migration on someone else's configuration. The camera preview was verified
after this release's final change.
Installing
Android 10 or newer. The APK is signed with the same key as previous releases, so it
installs over them.
sha256: d06d2bec31457bc31534f43d18eaf522163b9ffe054ae556116a3315c33d9234
Русский · English
Что нового
По сравнению с 0.1.5-beta ничего. Эти версии существуют ради того, чтобы наш APK
и APK, собранный F-Droid из исходников, совпадали: сборка больше не пишет внутрь
пакета хэш коммита и не кладёт туда зашифрованный блок со списком зависимостей для
Google Play — сканер каталога отказывается принимать блок, содержимое которого нельзя
проверить.
Один список виджетов сцены вместо двух. «Оверлеи» и «Браузерные виджеты» были
разными экранами, и разница между ними была нашей внутренней, а не смысловой: один
браузерный виджет доната клался в первый список, другой во второй. Теперь список один,
а при добавлении выбирается тип: донат-алерт, веб-страница, картинка или текст.
Картинка и текст не заводят браузер вовсе. До сих пор «повесить картинку поверх
видео» стоило целого WebView — замерено 9–10% одного ядра на виджет плюс пересъёмка
каждые 200 мс. Новые нативные типы не стоят почти ничего: картинка читается один раз, а
строка текста перерисовывается только когда действительно изменилась. В тексте работают
подстановки {time}, {battery} и {bitrate}.
Ваши оверлеи и браузерные виджеты переедут сами, вместе с тем, в каких они сценах.
Донат собран в один блок. Картинка и подпись были двумя независимыми оверлеями со
своей геометрией, поэтому расходились, сдвигались у края кадра, а текст растягивался
при изменении размера окна. Теперь они склеиваются в одно изображение: картинка сверху,
под ней ник и сумма, под ними сообщение, — и весь блок масштабируется вместе с окном.
Подпись при этом рисуется сразу в разрешении кадра, поэтому на большом окне текст
больше не мылится.
Исправлено: рамка размещения врала о размере в 2.75 раза. Она считалась в пикселях,
а применялась как аппаратно-независимые единицы, и на телефоне с плотностью 2.75 рамка
на экране была почти втрое больше той доли кадра, которую сохраняла. Окно, растянутое
«на пол-экрана», уезжало в настройки как 16% ширины, и донат в эфире выходил крошечным.
Та же ошибка была у панели чата и браузерных виджетов.
Исправлено: белый экран при запуске. Системная заставка брала цвет из светлой темы
и показывала иконку на белом, прежде чем появлялся наш тёмный интерфейс.
Заставка при запуске — дождь из символов маскота. Рисуется кодом, а не
проигрывается файлом, поэтому ничего не добавляет к размеру загрузки. Играет в
альбомной ориентации: запуск в портрете упёрся в поворот камеры (превью выходило
узкой повёрнутой полосой) и отложен к мастеру первого запуска, где портрет нужен
всё равно.
Кнопка «Снимок». Сохраняет текущий кадр в галерею — тот, что видит зритель, с
оверлеями и эффектами, а не отдельное фото с камеры. Разрешений не требует.
В HUD у соты показывается имя оператора вместо слова CELLULAR, а типографика
приведена к одной системе: один стиль для подписей, другой для чисел (с цифрами
одинаковой ширины, поэтому меняющийся битрейт больше не дёргает соседей), третий для
имён каналов. Размер значков один вместо трёх.
Ещё: диалоги стали компактными вместо материальных, занимавших пол-экрана в
альбомной ориентации; диалог удаления называет, что именно удаляется, и красит опасную
кнопку; моргание маскота больше не выглядит как посторонний круглый глаз.
По-прежнему бета
Всё, что мы знаем о поведении приложения, по-прежнему получено с одного Samsung S21.
Внешних отчётов пока нет — «Настройки → О приложении → Паспорт устройства» собирает
такой отчёт, и это главный способ снять ограничение.
Не проверено на устройстве в этом релизе: типы виджетов «картинка» и «текст» в эфире и
миграция настроек на чужой конфигурации. Превью камеры проверено после последней правки
этого релиза.
Установка
Android 10 и новее. APK подписан тем же ключом, что и прошлые релизы, поэтому ставится
поверх них.
sha256: d06d2bec31457bc31534f43d18eaf522163b9ffe054ae556116a3315c33d9234
Brix 0.1.6-beta
English · Русский
What's new
Nothing new since 0.1.5-beta. This version exists so that the APK we publish and
the APK F-Droid builds from source can be identical: the build no longer writes the
source commit hash into the package, which could never match between our two source
trees.
One list of scene widgets instead of two. "Overlays" and "Browser widgets" were
separate screens, and which one a thing belonged to was our internal distinction, not
a meaningful one: one browser-based donation widget went into the first list, another
into the second. There is now a single list, and you pick a type when you add a widget:
donation alert, web page, image, or text.
Image and text widgets do not start a browser at all. Until now, putting a picture
over the video cost a whole WebView — measured at 9–10% of one CPU core per widget,
with a snapshot loop running every 200 ms. The new native types cost essentially
nothing: an image is read once, and a text line is redrawn only when it actually
changes. Text supports {time}, {battery} and {bitrate}.
Your existing overlays and browser widgets are migrated automatically, including which
scenes they belong to.
Donation alerts are laid out as one block. The picture and the caption used to be
two independent overlays with separate geometry, so they drifted apart, shifted near
the frame edge, and the text stretched when the window was resized. They are now glued
into a single image: the picture on top, then the donor's name and amount, then the
message — and the whole block scales together with its window. The caption is also
rendered at the frame's own resolution, so the text no longer blurs on a large window.
Fixed: the placement frame lied about the size by 2.75×. Its box was computed in
pixels but applied as density-independent units, so on a phone with 2.75 density the
frame on screen was nearly three times larger than the share of the frame it saved. A
window dragged out to "half the screen" was stored as 16% of the width, and the alert
came out tiny. The same bug affected the chat panel and browser widgets.
Fixed: no more white flash at startup. The system splash screen took its colour
from a light theme and showed the icon on white before the app's own dark interface
appeared.
An intro animation on launch — a rain of mascot glyphs, drawn by code rather than
played from a file, so it adds nothing to the download size. It plays in landscape:
launching in portrait turned out to need real work in the camera layer (the preview
came out as a narrow, rotated strip), and that is deferred to the first-run wizard,
where portrait is needed anyway.
Snapshot button. Saves the current frame to the gallery — the frame as viewers see
it, with overlays and effects, not a separate camera photo. No permissions needed.
HUD: the cellular link shows the carrier name instead of the word CELLULAR, and the
typography was brought to one system — one style for labels, one for numbers (with
fixed-width digits, so a changing bitrate no longer nudges its neighbours), one for
link names. Icons are one size instead of three.
Also: dialogs are compact instead of the material default that took half the screen
in landscape; a deletion dialog now names what is being deleted and colours the
dangerous button; the mascot's blink no longer looks like a stray open eye.
Still a beta
Everything we know about this app's behaviour still comes from a single Samsung S21.
There are no external device reports yet — Settings → About → Device passport collects
one and is the main way to lift that limit.
Not verified on a device in this release: the image and text widget types on air, and
the settings migration on someone else's configuration. The camera preview was verified
after this release's final change.
Installing
Android 10 or newer. The APK is signed with the same key as previous releases, so it
installs over them.
sha256: ada65193f0c3fa1be69d8785a9304f55da348d43a43b2ef1bac6b4dbeb0a4df9
Русский · English
Что нового
По сравнению с 0.1.5-beta ничего. Эта версия существует ради того, чтобы наш APK
и APK, собранный F-Droid из исходников, совпадали: сборка больше не пишет внутрь
пакета хэш коммита, который у двух наших деревьев не совпадёт никогда.
Один список виджетов сцены вместо двух. «Оверлеи» и «Браузерные виджеты» были
разными экранами, и разница между ними была нашей внутренней, а не смысловой: один
браузерный виджет доната клался в первый список, другой во второй. Теперь список один,
а при добавлении выбирается тип: донат-алерт, веб-страница, картинка или текст.
Картинка и текст не заводят браузер вовсе. До сих пор «повесить картинку поверх
видео» стоило целого WebView — замерено 9–10% одного ядра на виджет плюс пересъёмка
каждые 200 мс. Новые нативные типы не стоят почти ничего: картинка читается один раз, а
строка текста перерисовывается только когда действительно изменилась. В тексте работают
подстановки {time}, {battery} и {bitrate}.
Ваши оверлеи и браузерные виджеты переедут сами, вместе с тем, в каких они сценах.
Донат собран в один блок. Картинка и подпись были двумя независимыми оверлеями со
своей геометрией, поэтому расходились, сдвигались у края кадра, а текст растягивался
при изменении размера окна. Теперь они склеиваются в одно изображение: картинка сверху,
под ней ник и сумма, под ними сообщение, — и весь блок масштабируется вместе с окном.
Подпись при этом рисуется сразу в разрешении кадра, поэтому на большом окне текст
больше не мылится.
Исправлено: рамка размещения врала о размере в 2.75 раза. Она считалась в пикселях,
а применялась как аппаратно-независимые единицы, и на телефоне с плотностью 2.75 рамка
на экране была почти втрое больше той доли кадра, которую сохраняла. Окно, растянутое
«на пол-экрана», уезжало в настройки как 16% ширины, и донат в эфире выходил крошечным.
Та же ошибка была у панели чата и браузерных виджетов.
Исправлено: белый экран при запуске. Системная заставка брала цвет из светлой темы
и показывала иконку на белом, прежде чем появлялся наш тёмный интерфейс.
Заставка при запуске — дождь из символов маскота. Рисуется кодом, а не
проигрывается файлом, поэтому ничего не добавляет к размеру загрузки. Играет в
альбомной ориентации: запуск в портрете упёрся в поворот камеры (превью выходило
узкой повёрнутой полосой) и отложен к мастеру первого запуска, где портрет нужен
всё равно.
Кнопка «Снимок». Сохраняет текущий кадр в галерею — тот, что видит зритель, с
оверлеями и эффектами, а не отдельное фото с камеры. Разрешений не требует.
В HUD у соты показывается имя оператора вместо слова CELLULAR, а типографика
приведена к одной системе: один стиль для подписей, другой для чисел (с цифрами
одинаковой ширины, поэтому меняющийся битрейт больше не дёргает соседей), третий для
имён каналов. Размер значков один вместо трёх.
Ещё: диалоги стали компактными вместо материальных, занимавших пол-экрана в
альбомной ориентации; диалог удаления называет, что именно удаляется, и красит опасную
кнопку; моргание маскота больше не выглядит как посторонний круглый глаз.
По-прежнему бета
Всё, что мы знаем о поведении приложения, по-прежнему получено с одного Samsung S21.
Внешних отчётов пока нет — «Настройки → О приложении → Паспорт устройства» собирает
такой отчёт, и это главный способ снять ограничение.
Не проверено на устройстве в этом релизе: типы виджетов «картинка» и «текст» в эфире и
миграция настроек на чужой конфигурации. Превью камеры проверено после последней правки
этого релиза.
Установка
Android 10 и новее. APK подписан тем же ключом, что и прошлые релизы, поэтому ставится
поверх них.
sha256: ada65193f0c3fa1be69d8785a9304f55da348d43a43b2ef1bac6b4dbeb0a4df9
Brix 0.1.5-beta
English · Русский
What's new
One list of scene widgets instead of two. "Overlays" and "Browser widgets" were
separate screens, and which one a thing belonged to was our internal distinction, not
a meaningful one: one browser-based donation widget went into the first list, another
into the second. There is now a single list, and you pick a type when you add a widget:
donation alert, web page, image, or text.
Image and text widgets do not start a browser at all. Until now, putting a picture
over the video cost a whole WebView — measured at 9–10% of one CPU core per widget,
with a snapshot loop running every 200 ms. The new native types cost essentially
nothing: an image is read once, and a text line is redrawn only when it actually
changes. Text supports {time}, {battery} and {bitrate}.
Your existing overlays and browser widgets are migrated automatically, including which
scenes they belong to.
Donation alerts are laid out as one block. The picture and the caption used to be
two independent overlays with separate geometry, so they drifted apart, shifted near
the frame edge, and the text stretched when the window was resized. They are now glued
into a single image: the picture on top, then the donor's name and amount, then the
message — and the whole block scales together with its window. The caption is also
rendered at the frame's own resolution, so the text no longer blurs on a large window.
Fixed: the placement frame lied about the size by 2.75×. Its box was computed in
pixels but applied as density-independent units, so on a phone with 2.75 density the
frame on screen was nearly three times larger than the share of the frame it saved. A
window dragged out to "half the screen" was stored as 16% of the width, and the alert
came out tiny. The same bug affected the chat panel and browser widgets.
Fixed: no more white flash at startup. The system splash screen took its colour
from a light theme and showed the icon on white before the app's own dark interface
appeared.
An intro animation on launch — a rain of mascot glyphs, drawn by code rather than
played from a file, so it adds nothing to the download size. It plays in landscape:
launching in portrait turned out to need real work in the camera layer (the preview
came out as a narrow, rotated strip), and that is deferred to the first-run wizard,
where portrait is needed anyway.
Snapshot button. Saves the current frame to the gallery — the frame as viewers see
it, with overlays and effects, not a separate camera photo. No permissions needed.
HUD: the cellular link shows the carrier name instead of the word CELLULAR, and the
typography was brought to one system — one style for labels, one for numbers (with
fixed-width digits, so a changing bitrate no longer nudges its neighbours), one for
link names. Icons are one size instead of three.
Also: dialogs are compact instead of the material default that took half the screen
in landscape; a deletion dialog now names what is being deleted and colours the
dangerous button; the mascot's blink no longer looks like a stray open eye.
Still a beta
Everything we know about this app's behaviour still comes from a single Samsung S21.
There are no external device reports yet — Settings → About → Device passport collects
one and is the main way to lift that limit.
Not verified on a device in this release: the image and text widget types on air, and
the settings migration on someone else's configuration. The camera preview was verified
after this release's final change.
Installing
Android 10 or newer. The APK is signed with the same key as previous releases, so it
installs over them.
sha256: 68d7d30db2bde8a393372163f471e9fb0755fa76629312b73878a6bbef1fcf85
Русский · English
Что нового
Один список виджетов сцены вместо двух. «Оверлеи» и «Браузерные виджеты» были
разными экранами, и разница между ними была нашей внутренней, а не смысловой: один
браузерный виджет доната клался в первый список, другой во второй. Теперь список один,
а при добавлении выбирается тип: донат-алерт, веб-страница, картинка или текст.
Картинка и текст не заводят браузер вовсе. До сих пор «повесить картинку поверх
видео» стоило целого WebView — замерено 9–10% одного ядра на виджет плюс пересъёмка
каждые 200 мс. Новые нативные типы не стоят почти ничего: картинка читается один раз, а
строка текста перерисовывается только когда действительно изменилась. В тексте работают
подстановки {time}, {battery} и {bitrate}.
Ваши оверлеи и браузерные виджеты переедут сами, вместе с тем, в каких они сценах.
Донат собран в один блок. Картинка и подпись были двумя независимыми оверлеями со
своей геометрией, поэтому расходились, сдвигались у края кадра, а текст растягивался
при изменении размера окна. Теперь они склеиваются в одно изображение: картинка сверху,
под ней ник и сумма, под ними сообщение, — и весь блок масштабируется вместе с окном.
Подпись при этом рисуется сразу в разрешении кадра, поэтому на большом окне текст
больше не мылится.
Исправлено: рамка размещения врала о размере в 2.75 раза. Она считалась в пикселях,
а применялась как аппаратно-независимые единицы, и на телефоне с плотностью 2.75 рамка
на экране была почти втрое больше той доли кадра, которую сохраняла. Окно, растянутое
«на пол-экрана», уезжало в настройки как 16% ширины, и донат в эфире выходил крошечным.
Та же ошибка была у панели чата и браузерных виджетов.
Исправлено: белый экран при запуске. Системная заставка брала цвет из светлой темы
и показывала иконку на белом, прежде чем появлялся наш тёмный интерфейс.
Заставка при запуске — дождь из символов маскота. Рисуется кодом, а не
проигрывается файлом, поэтому ничего не добавляет к размеру загрузки. Играет в
альбомной ориентации: запуск в портрете упёрся в поворот камеры (превью выходило
узкой повёрнутой полосой) и отложен к мастеру первого запуска, где портрет нужен
всё равно.
Кнопка «Снимок». Сохраняет текущий кадр в галерею — тот, что видит зритель, с
оверлеями и эффектами, а не отдельное фото с камеры. Разрешений не требует.
В HUD у соты показывается имя оператора вместо слова CELLULAR, а типографика
приведена к одной системе: один стиль для подписей, другой для чисел (с цифрами
одинаковой ширины, поэтому меняющийся битрейт больше не дёргает соседей), третий для
имён каналов. Размер значков один вместо трёх.
Ещё: диалоги стали компактными вместо материальных, занимавших пол-экрана в
альбомной ориентации; диалог удаления называет, что именно удаляется, и красит опасную
кнопку; моргание маскота больше не выглядит как посторонний круглый глаз.
По-прежнему бета
Всё, что мы знаем о поведении приложения, по-прежнему получено с одного Samsung S21.
Внешних отчётов пока нет — «Настройки → О приложении → Паспорт устройства» собирает
такой отчёт, и это главный способ снять ограничение.
Не проверено на устройстве в этом релизе: типы виджетов «картинка» и «текст» в эфире и
миграция настроек на чужой конфигурации. Превью камеры проверено после последней правки
этого релиза.
Установка
Android 10 и новее. APK подписан тем же ключом, что и прошлые релизы, поэтому ставится
поверх них.
sha256: 68d7d30db2bde8a393372163f471e9fb0755fa76629312b73878a6bbef1fcf85
Brix 0.1.3-beta
English · Русский
Security — please read
The stream key no longer reaches the logs. For SRTLA the key travels inside the
stream id (?srtauth=…), and it was written to the system log in full on every
connect. That log is included in the diagnostics export — the file you hand to other
people. Together with the settings cleanup in 0.1.2-beta this closes both paths.
If you have ever shared a diagnostics export or a logcat, rotate your stream key.
The default Moblink password is no longer 1234. It was the same for everyone
who installed the app, on a service that listens on your local network. A random one
is now generated on first install, and the old default is replaced on upgrade.
If you had a relay paired, re-enter the new password — Settings → Moblink.
What's new
Channel weights are now a rank from 1 to 10 instead of 0 to 100. The old scale fed
the bonding algorithm numbers of the wrong magnitude: the formula it inherited from
srtla expects a small rank, and a weight of 41 meant a fortyfold spread where it
expected a few times. Existing weights are converted automatically (80 → 8). Verified
on air: with 8 and 2 the traffic split matches 4:1.
Pick the exact microphone, not just the kind. With two Bluetooth headsets connected
the app used to take whichever came first. Now the device is chosen by name, and the
name is shown under the setting. If the chosen device is absent, any device of the same
kind is used rather than leaving you silent.
Fixed: the numbers no longer freeze after Stop. Per-link bitrates stayed on screen
as if the stream were still running.
Fixed: the "add a server" screen no longer flashes at every launch, even with
servers long configured.
Also: the audio screen is split into "Microphone" and "Stream audio"; channel
priorities fit on one screen and name the profile they edit; the session log records
the encoder, resolution and reconnect count.
Still a beta
Everything from 0.1.0-beta
still applies: tested on a single device, a Samsung S21. WHIP, long MP4 recordings and
Moblink remain untested.
Installing
sha256 2b35ba66560bbd15fc7594ee0e96ee7f527fdc7b519e8acb05b01c2a33aac42b
Русский
Безопасность — прочитайте
Ключ трансляции больше не попадает в лог. У SRTLA ключ едет внутри stream id
(?srtauth=…), и при каждом подключении он целиком писался в системный лог. Этот лог
входит в выгрузку диагностики — тот файл, который отдают другим людям. Вместе с
чисткой настроек в 0.1.2-beta закрыты оба пути.
Если вы когда-нибудь делились выгрузкой диагностики или логом — смените ключ
трансляции.
Пароль Moblink по умолчанию больше не 1234. Он был одинаковым у всех, кто
поставил приложение, при том что служба слушает вашу локальную сеть. Теперь при первой
установке генерируется случайный, а прежний по умолчанию заменяется при обновлении.
Если у вас был настроен релей — введите новый пароль: Настройки → Moblink.
Что нового
Вес канала стал рангом от 1 до 10 вместо 0–100. Прежняя шкала кормила алгоритм
бондинга числами не того порядка: формула, унаследованная от srtla, рассчитана на
небольшой ранг, и вес 41 означал разброс в сорок раз там, где ожидались разы. Прежние
значения переводятся сами (80 → 8). Проверено в эфире: при 8 и 2 трафик делится 4:1.
Выбор конкретного микрофона, а не только типа. При двух подключённых
Bluetooth-гарнитурах бралась первая попавшаяся. Теперь устройство выбирается по имени,
и имя видно под настройкой. Если выбранного устройства нет, берётся любое того же
типа — остаться без звука хуже.
Исправлено: после остановки эфира цифры больше не замирают. Битрейты по каналам
оставались на экране, будто трансляция идёт.
Исправлено: экран «добавьте сервер» больше не мелькает при каждом запуске, даже
когда всё давно настроено.
Ещё: экран звука разделён на «Микрофон» и «Звук в эфире»; приоритеты каналов
помещаются на один экран и называют профиль, который правят; в журнал сессии пишутся
энкодер, разрешение и число переподключений.
По-прежнему бета
Всё, что сказано в 0.1.0-beta,
остаётся в силе: проверено на одном устройстве, Samsung S21. WHIP, длинная запись в MP4
и Moblink не проверялись.
Установка
sha256 2b35ba66560bbd15fc7594ee0e96ee7f527fdc7b519e8acb05b01c2a33aac42b
Brix 0.1.2-beta
English · Русский
What's new
Device passport. Settings → About → Device passport: what your particular
hardware actually supports — encoders and whether they do constant bitrate,
lenses and their capture modes, audio inputs. The report is shown in full and
sent only by you; it carries no stream keys and nothing that identifies you.
Everything known about this app still comes from one Samsung S21, so attaching
it to an issue is the most useful thing you can do right now.
The diagnostics export no longer carries secrets. It used to include the
stream key, the address of your own server, your channel names and the
donation widget token. Now only settings that affect behaviour are included.
If you have shared a diagnostics export before, rotate your stream key.
Channel priorities: all links fit on the screen — Ethernet (USB) used to
be cut off and unreachable — the screen says which stream profile it edits,
and the caption no longer conflates a link's weight with its share of the
bandwidth.
Still a beta
Everything from 0.1.0-beta
still applies: tested on a single device, a Samsung S21. WHIP, long MP4
recordings and Moblink remain untested.
Installing
sha256 b17fa757f68011d627b56279b2184319b4fd87650db1be85b9bf7edaf8ee5a70
Русский
Что нового
Паспорт устройства. Настройки → О приложении → Паспорт устройства: что
умеет железо именно вашего телефона — энкодеры и держат ли они постоянный
битрейт, объективы и их режимы съёмки, входы звука. Отчёт показывается целиком
и отправляете его вы; ключей трансляции и чего-либо, что вас опознаёт, в нём
нет. Всё, что известно о приложении, по-прежнему получено на одном Samsung S21,
поэтому приложить его к issue — самое полезное, что сейчас можно сделать.
Выгрузка диагностики больше не несёт лишнего. Раньше в неё попадали ключ
трансляции, адрес собственного сервера, имена каналов и токен виджета доната.
Теперь в отчёт идут только настройки, влияющие на поведение. Если вы делились
выгрузкой диагностики раньше — смените ключ трансляции.
Приоритеты каналов: все каналы помещаются на экран — Ethernet (USB)
обрезался и был недостижим, — экран говорит, какой профиль стрима правит,
а подпись больше не путает вес канала с его долей полосы.
По-прежнему бета
Всё, что сказано в 0.1.0-beta,
остаётся в силе: проверено на одном устройстве, Samsung S21. WHIP, длинная
запись в MP4 и Moblink не проверялись.
Установка
sha256 b17fa757f68011d627b56279b2184319b4fd87650db1be85b9bf7edaf8ee5a70
Brix 0.1.1-beta
English · Русский
What's new
Plain SRT for receivers without SRTLA. The URL scheme picks the mode:
srtla:// bonds several links, srt:// talks to any SRT server —
srt-live-transmit, SLS, OBS's SRT input. Field-tested; SRTLA bonding is
unaffected and still carries both links.
The stream key has its own field now, masked behind dots. It used to go at
the end of the URL, where it was shown in full whenever you opened the server
for editing. Existing profiles keep working unchanged.
Fixed: importing a configuration with an srt:// address created a
profile that could never connect.
Still a beta
Everything from 0.1.0-beta
still applies: tested on a single device, a Samsung S21. WHIP, long MP4
recordings and Moblink remain untested.
Installing
sha256 39db5f5e4c76c9318872ba27be88951f89f91507c0e5d2002bcf190ad2f8aea1
Русский
Что нового
Обычный SRT — для приёмников без SRTLA. Режим выбирается схемой адреса:
srtla:// объединяет каналы, srt:// работает с любым SRT-сервером —
srt-live-transmit, SLS, вход SRT в OBS. Проверено в поле; бондинг SRTLA не
затронут и по-прежнему несёт оба канала.
У ключа трансляции появилось своё поле, скрытое точками. Раньше его
приходилось вписывать в конец адреса, где он был виден целиком при открытии
сервера. Прежние профили продолжают работать как есть.
Исправлено: импорт конфигурации с адресом srt:// создавал профиль,
который заведомо не мог подключиться.
По-прежнему бета
Всё, что сказано в 0.1.0-beta,
остаётся в силе: проверено на одном устройстве, Samsung S21. WHIP, длинная
запись в MP4 и Moblink не проверялись.
Установка
sha256 39db5f5e4c76c9318872ba27be88951f89f91507c0e5d2002bcf190ad2f8aea1
Brix 0.1.0-beta
English · Русский
First public release. An app for streaming from your phone while you move
around: several network links are bonded into one stream, so the broadcast
survives the walk from Wi-Fi to cellular.
What's inside
- SRTLA with link bonding, RTMP and WHIP. The SRT and SRTLA client
is written from scratch in Kotlin. - Adaptive bitrate in the BELABOX spirit, per-link priorities and weights,
reconnect. - Scenes: camera, a "be right back" still, screen capture.
- Twitch, Kick and VK Video Live chat in one feed, without a WebView.
- DonationAlerts overlays drawn straight into the frame.
- Moblink, MP4 recording, a per-second session log.
This is a beta
Used on air, but on a single device — Samsung S21 (Exynos 2100, Android 15).
Untested: WHIP against a live receiver; MP4 recording over long sessions;
Moblink with a real second phone; streaming directly to Twitch, YouTube or Kick
(all our broadcasts went to our own server).
Limitations: donation overlays support DonationAlerts only; on the S21 no
hardware encoder supports constant bitrate, so the actual bitrate can exceed the
target; at 1080p the phone reaches the critical thermal state in about six
minutes — the stream does not break; streaming costs 6-10 W, which is one and a
half to two and a half hours on the internal battery.
Installing
Download brix-0.1.0-beta.apk and install it. Android will warn about an
unknown source — expected for a file that does not come from a store.
To check the file was not tampered with:
sha256 0d1578f9faef6cbd396e2661561cc709dc0a4da54a0559e18adf83864c9dcb4e
Bonding needs an SRTLA-capable receiver, for example
bbox-receiver on your own server.
Plain RTMP needs no server of your own.
How to help
What this project needs most are reports from other phones — everything
known about its behaviour comes from one S21. Even "it just works" is useful:
open a report.
Русский
Первый открытый выпуск. Приложение для трансляций с телефона на ходу: несколько
сетевых каналов объединяются в один поток, чтобы эфир пережил переход с Wi-Fi
на соту.
Что внутри
- SRTLA с объединением каналов, RTMP и WHIP. Клиент SRT и SRTLA
написан с нуля на Kotlin. - Адаптивный битрейт в духе BELABOX, приоритеты и веса каналов, переподключение.
- Сцены: камера, заставка «сейчас вернусь», захват экрана.
- Чат Twitch, Kick и VK Video Live в одной ленте, без WebView.
- Донат-оверлеи DonationAlerts с отрисовкой прямо в кадр.
- Moblink, запись в MP4, посекундный журнал сессии.
Это бета
Проверено в эфире, но на одном устройстве — Samsung S21 (Exynos 2100,
Android 15).
Не проверялось: WHIP на живом приёмнике; запись в MP4 на длинных сессиях;
Moblink с реальным вторым телефоном; трансляция напрямую на Twitch, YouTube и
Kick (все наши эфиры шли на собственный сервер).
Ограничения: донат-оверлеи только DonationAlerts; на S21 ни один аппаратный
энкодер не держит постоянный битрейт, поэтому фактический может превышать
заданный; в 1080p телефон доходит до теплового critical примерно за шесть
минут, поток при этом не рвётся; эфир стоит 6–10 Вт, то есть полтора-два с
половиной часа на внутренней батарее.
Установка
Скачайте brix-0.1.0-beta.apk и установите. Android предупредит об установке
из неизвестного источника — это нормально для файла не из магазина.
Проверить, что файл не подменён:
sha256 0d1578f9faef6cbd396e2661561cc709dc0a4da54a0559e18adf83864c9dcb4e
Для объединения каналов нужен приёмник с поддержкой SRTLA — например
bbox-receiver на своём сервере.
Для обычного RTMP свой сервер не нужен.
Чем помочь
Больше всего нужны отчёты с других телефонов — всё, что известно о
поведении приложения, получено на одном S21. Даже «просто работает» полезно:
создать отчёт.