Рубріки: ДосвідРішення

Захотів зробити апку для скрінкастів

Володимир Рожков

Коли я ще працював на теплій програмістській роботі, то мав потребу записувати короткі відео для користувачів та клієнтів.

Дуже проста функція — екран + кружечок з вебкамери + мікрофон. Розумні люди для цього зробили Loom та йому подібні, професіонали користуються OBS.

Але Loom не має апки для Linux і працює лише як аддон у браузері. Я побачив тут opportunity та подумав — а чому б мені не зробити таку нативну апку? Задача звучить досить просто — іконка в треї, натискаєш на неї — починається запис, натискаєш ще раз — запис завершується і відкривається віконечко з посиланням на твоє відео, яке можна пошарити кому треба.

Чому нативну? В мене є незакритий гештальт. Дуже дратує веб-bloatware.

План був такий — зробити опенсорну апку та закритий сервер. З людей брати гроші за сторедж. Таких проєктів багато, а значить ідея провалідована.

Поліз робити, і…

Виявилося що все не так просто.

Я хотів взяти Rust, ui бібліотеку egui, там зробити одну кнопку.

Почав копати як отримати доступ до екрана та вебки, і нічого кращого ніж ffmpeg не знайшов. Для Rust є біндинги до ffmpeg, але вони настільки низькорівневі, що їх вивчення не вкладалося в бюджет mvp.

Мені вдалося зробити мікропрототип запису екрана, але я так і не зміг прокинути параметри кодування ffmpeg, які регулюють якість і також зіткнувся з несумісністю версій.

Якщо пошукати, то є програми для запису екрана, які враплять виклики до бінарника ffmpeg, наприклад Blue Recorder. В принципі це те, що мені треба, туди тільки додати кружечок з вебки й аплоад на сервер.

Врешті, через високу складність, цю ідею я закинув.

Потім знову повернувся, з менш амбітною ціллю. Просто зробити клон Loom. Браузер дає високорівневе API яке ховає всі складності.

Давай думаю зроблю апку на електроні. Електрон — вчорашній день, розумні люди написали на расті Tauri, який швидший та компактніший. Ну, думаю, зараз заживемо, на JavaScript я вже точно подужаю зробити задачу.

Розгорнув хеловорлд, згенерував через Claude мінімальну версію запису екрана, запускаю, і… нічого. Дивлюся в чому справа — апка не може запитати дозвіл на запис. Йду на github, щоб дізнатися, що Tauri не підтримує WebRTC і поки що не планує це робити.

Потім я пішов ще раз подивитися, як працює Loom та інші веб-додатки для запису екрану. Мені дуже не сподобалося що воно завжди запитує дозволи та також показує бейджик «ви шарите ваш екран». Я ж хочу нативне рішення, тому відмовився від електрону.

Давай думати далі, я ж Java-розробник? Напевне там щось має бути. Ось JetBrains зробили Compose Multiplatform, візьму його, а вже якесь АРІ в Java має бути. Почав шукати — та ж проблема, є біндинги до ffmpeg якими хз як користуватися.

Якихось притомних бібліотек теж не знайшов — все або старе, або обмежене. Вирішив, що раз на Java тямущого не зможу зробити, то й Kotlin брати не варто.

Ще раз подивився на Loom. Ще раз подивився на ffmpeg.

Зібрав однорядкову команду на ffmpeg, яка записує одночасно відео екрана, вебкамеру та звук з вебкамери в один файл і накладає вебкамеру, власне, на запис екрана.

В цілому можна було б взяти ту програму на Rust, яка врапила бінарник ffmpeg, додати туди аргументів та якось то зліпити докупи, але такий підхід має фатальний недолік — самого кружечка з вебкою воно не показує. Втім, Loom теж цього не робить.

Ніби проста задача — а все тааак складно! Ідеально б мати якесь високорівневе API яке б дозволяло отримувати потрібні відеопотоки та комбінувати їх і відразу стрімити. OBS цю задачу вирішує просто чудово, але виглядає це все абсолютно непідйомно.

Думаю що робити далі.

Update: читач підказав рішення, автори якого вже пройшли увесь шлях та написали нативну апку на Rust: Cap.

Цей текст взято з особистого блогу після отримання дозволу автора.

Якщо ви знайшли помилку, будь ласка, виділіть фрагмент тексту та натисніть Ctrl+Enter.

Останні статті

ChatGPT, моторошна долина та трохи Фройда

Днями я завзято нила про щось ChatGPT (експериментую між сеансами з живим терапевтом). І от…

17.04.2025

Я прийшла за покупками, а не крутити колесо

«Крутіть колесо, щоб отримати знижку до 50%!» «Натисніть тут, щоб відкрити таємничу пропозицію!» «Зареєструйтесь зараз,…

16.04.2025

Майже навайбкодив десктопний монітор CI пайплайнів

Дуже хочеться робити якісь десктопні апки. Сумую за часами коли всі програми були offline-first, і…

15.04.2025

Як працюють транзакційні комісії в мережах Bitcoin і Ethereum

Надсилаючи криптовалюту, багато новачків ставлять запитання: як працюють комісії та чому вони відрізняються в різних…

14.04.2025

Обережно, тепер вас можуть обдурити на співбесіді з роботодавцем

Нова афера набирає обертів — ось детальний розбір того, як фальшиві потенційні роботодавці намагаються вкрасти…

11.04.2025

Цілі застосунки в соцмережі? На останньому ETHKyiv Impulse довели, що це можливо

Соцмережа з можливістю вбудовувати повноцінні додатки прямо в пости — звучить як фантастика, але Farcaster…

10.04.2025