LiveSubtitles
Orodje za podnaslavljanje v realnem času, ki vžge žive podnapise v video toke, da lahko gluhi in naglušni sledijo javnim predavanjem, konferencam in dogodkom v živo — natančno do posameznega okvirja, vodeno s strani operaterja, pripravljeno za RTMP. V uporabi pri eni največjih svetovnih organizacij v več državah.
Pregled
LiveSubtitles sem zgradil, da bi rešil težavo, ki sem jo pogosto videl na dogodkih: gluhi in naglušni obiskovalci so ali dobili natisnjeno verzijo več ur kasneje ali pa ničesar. Orodje operaterju ponudi urejevalnik besedila, kjer se premika po pripravljenih vrsticah podnapisov — in v trenutku, ko premakne kazalec, se to besedilo piksel po pikslu komponira na vsak odhodni video okvir. Podnaslovljeni tok nato gre v živo prek RTMP na YouTube, Twitch ali katero koli končno točko, ki jo prostor že uporablja. Brez ločene storitve za podnapise. Brez naročnine na CDN. En prenosnik, en operater.
Cevovod, ki sem ga razvil, teče kot: VideoReader → VideoSubtitleFilter → AudioInputFilter → VideoStreamer. JavaCV in FFmpeg opravita težje delo — H.264 enkodiranje pri nastavljivem bitrateu in presetu, AAC zvok pri 120 kbit/s, in HLS playlist proxy, da lahko naprave občinstva prevzemajo tok neposredno z operaterjeve naprave, kadar zunanjega CDN ni. SRT logger seje časovno označi vsako spremembo podnapisa in ob koncu vsake seje izvozi celotno .srt datoteko, kar organizacijam zagotovi trajen zapis dostopnosti.
Overlay različica je bila prva izvedba — okrnjen NetBeans projekt, narejen za eno največjih svetovnih organizacij, danes uporabljen v več državah po svetu. Vključuje vedno na vrhu okno overlaya, ki se razteza čez projektor, omejitve znakov na vrstico in lasten format datotek za pripravljene skripte, namenjen dogodkom v velikih dvoranah, kjer operaterji sledijo predhodno preverjenemu besedilu. Lekcije iz te globalne uporabe so usmerile predelavo 1.0 – 1.2 v čistejši Maven projekt z urejanjem v več zavihkih, drag-and-drop zavihki podnapisov, podporo za push-to-talk in povsem nastavljivim videzom podnapisov.
Arhitektura
Branje diagrama: Štirje vhodi operaterja — video vir (datoteka, HLS ali YouTube URL), mikrofonska linija, pripravljen dokument s podnapisi in opcijska HLS playlist — se vsi stekajo v en sam, na FFmpeg temelječ cevovod okvirjev. Cevovod na vsak video okvir komponira besedilo podnapisa, preden ta doseže kateri koli izhod. Izhodi se razprejo: RTMP push za pretakanje v živo, SRT log seje za arhiv, opcijsko lokalno snemanje in — v poslovni overlay različici — vedno na vrhu okno overlaya, preslikano na projektorski zaslon. Vsako komponento je mogoče zamenjati v panelu nastavitev brez poseganja v cevovod.
Delo na dostopnosti ne pride na naslovnice, a je koda, ki šteje najbolj. Vsak okvir, ki ga je ta cevovod dobil pravilno, je bil stavek, ki mu je gluha članica občinstva lahko sledila.
Šest stvari dostavljenih,
tri težke rešene.
Ključni prispevki
- Zgradil sem cevovod za vžiganje podnapisov, natančen do okvirja:
VideoReader → VideoSubtitleFilter → AudioInputFilter → VideoStreamer, ki na H.264 video pri 30 fps komponira s strani operaterja izbrano besedilo podnapisa, preden gre v RTMP push. - Razvil sem RTMP streaming sloj z JavaCV in FFmpeg — nastavljiv bitrate, H.264 preset/tune, AAC zvok — ciljano za YouTube Live, Twitch in vse RTMP končne točke.
- Implementiral sem HLS download engine z lokalnim HTTP proxyjem, tako da so občinstva lahko prevzemala podnaslovljeni tok s katerega koli CDN brez nameščanja programske opreme.
- Napisal sem večformatni parser za podnapise, ki pokriva HTML, XML, .docx/.doc (Apache POI), SubRip (.srt) in lasten binarni format za poslovno overlay različico.
- Zgradil sem SRT logger seje, ki časovno označi vsak prehod podnapisa in ob koncu seje izvozi celotno .srt datoteko — trajni zapis dostopnosti.
- Izdal sem samostojno overlay različico, ki jo je sprejela ena največjih svetovnih organizacij — vedno na vrhu projektorski overlay, kontrole prosojnosti in pisave, omejitev znakov in lasten format datotek za pripravljene skripte — uporabljena v več državah po svetu.
Rešeni izzivi
- Povratni pritisk v cevovodu okvirjev — filter za podnapise je moral besedilo komponirati na surove video medpomnilnike s polno frame rate brez kopičenja memory leaka zaradi obstoječih JavaCV Frame objektov; rešeno s CircularFifoQueue s fiksno kapaciteto in asinhronim predpomnjenjem slik podnapisov.
- Drift med zvokom in sliko pri dolgih sejah — zgodnja HLS predvajanja so imela zvok, ki je odhajal stran od kazalca podnapisov; potreboval sem lasten PausableRelativeClock in adaptivni 2,5-sekundni buffer, usklajen skozi več izdaj (v1.0.5 → v1.1.1).
- Nič infrastrukture za občinstvo — orodje je moralo delovati v velikih dvoranah in skupnostnih prostorih brez ekipe za strežnike; lokalni HLS HTTP proxy je pomenil, da je operaterjev prenosnik celotna oddajna veriga.
Kaj poganja stvari.
Pripravljeni popraviti, zgraditi
ali skalirati?
30 minut, z mano osebno. Preberem vaš sistem kot dnevniško datoteko in povem, kaj bi naredil najprej. Brez prezentacij, brez prodajnega lijaka.
— Davor Majc, ustanovitelj, Numen
