/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠTh ib ault ĠB . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġio . github . th ib ault bee . stre amp ack . ext . s rt . stream ers Ċ Ċ import Ġandroid . content . Context Ċ import Ġio . github . th ib ault bee . stre amp ack . data . Bit rate Reg ulator Config Ċ import Ġio . github . th ib ault bee . stre amp ack . ext . s rt . internal . endpoints . S rt Producer Ċ import Ġio . github . th ib ault bee . stre amp ack . ext . s rt . reg ulator . s rt . S rt Bit rate Reg ulator Ċ import Ġio . github . th ib ault bee . stre amp ack . ext . s rt . stream ers . interfaces . IS rt Live Stream er Ċ import Ġio . github . th ib ault bee . stre amp ack . utils . Utils Ċ import Ġio . github . th ib ault bee . stre amp ack . internal . mux ers . ts . T SM ux er Ċ import Ġio . github . th ib ault bee . stre amp ack . internal . mux ers . ts . data . Ts Service Info Ċ import Ġio . github . th ib ault bee . stre amp ack . internal . utils . Scheduler Ċ import Ġio . github . th ib ault bee . stre amp ack . listeners . On Connection Listener Ċ import Ġio . github . th ib ault bee . stre amp ack . listeners . OnError Listener Ċ import Ġio . github . th ib ault bee . stre amp ack . logger . I Logger Ċ import Ġio . github . th ib ault bee . stre amp ack . logger . Stream Pack Logger Ċ import Ġio . github . th ib ault bee . stre amp ack . reg ulator . IB it rate Reg ulator Factory Ċ import Ġio . github . th ib ault bee . stre amp ack . stream ers . bases . Base Camera Stream er Ċ import Ġio . github . th ib ault bee . stre amp ack . stream ers . live . Base Camera Live Stream er Ċ Ċ /** Ċ Ġ* Ġ[ Base Camera Stream er ] Ġthat Ġsends Ġmicro phones Ġand Ġcamera o Ġframes Ġto Ġa Ġremote ĠSecure ĠRel iable Ċ Ġ* ĠTransport Ġ( S RT ) Ġdevice . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcontext Ġapplication Ġcontext Ċ Ġ* Ġ@ param Ġts Service Info ĠM PEG - TS Ġservice Ġdescription Ċ Ġ* Ġ@ param Ġlogger Ġa Ġ[ I Logger ] Ġimplementation Ċ Ġ* Ġ@ param Ġenable Audio Ġ[ Boolean . true ] Ġto Ġcapture Ġaudio . ĠFalse Ġto Ġdisable Ġaudio Ġcapture . Ċ Ġ* Ġ@ param Ġbit rate Reg ulator Factory Ġa Ġ[ IB it rate Reg ulator Factory ] Ġimplementation . ĠUse Ġit Ġto Ġcustomized Ġbit rate Ġreg ulator . Ġ ĠIf Ġbit rate Reg ulator Config Ġis Ġnot Ġnull , Ġbit rate Reg ulator Factory Ġmust Ġnot Ġbe Ġnull . Ċ Ġ* Ġ@ param Ġbit rate Reg ulator Config Ġbit rate Ġreg ulator Ġconfiguration . ĠIf Ġbit rate Reg ulator Factory Ġis Ġnot Ġnull , Ġbit rate Reg ulator Config Ġmust Ġnot Ġbe Ġnull . Ċ Ġ* Ġ@ param Ġinitial OnError Listener Ġinitialize Ġ[ OnError Listener ] Ċ Ġ* Ġ@ param Ġinitial On Connection Listener Ġinitialize Ġ[ On Connection Listener ] Ċ Ġ*/ Ċ class ĠCamera S rt Live Stream er ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġlogger : ĠILogger Ġ= ĠStream Pack Logger (), ĊĠĠĠ Ġenable Audio : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġts Service Info : ĠTs Service Info Ġ= ĠUtils . default Ts Service Info , ĊĠĠĠ Ġbit rate Reg ulator Factory : ĠI Bit rate Reg ulator Factory ? Ġ= Ġnull , ĊĠĠĠ Ġbit rate Reg ulator Config : ĠBit rate Reg ulator Config ? Ġ= Ġnull , ĊĠĠĠ Ġinitial OnError Listener : ĠOn Error Listener ? Ġ= Ġnull , ĊĠĠĠ Ġinitial On Connection Listener : ĠOn Connection Listener ? Ġ= Ġnull Ċ ) Ġ: ĠBase Camera Live Stream er ( ĊĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠ Ġlogger Ġ= Ġlogger , ĊĠĠĠ Ġenable Audio Ġ= Ġenable Audio , ĊĠĠĠ Ġmux er Ġ= ĠT SM ux er (). apply Ġ{ Ġadd Service ( ts Service Info ) Ġ}, ĊĠĠĠ Ġendpoint Ġ= ĠS rt Producer ( logger Ġ= Ġlogger ), ĊĠĠĠ Ġinitial OnError Listener Ġ= Ġinitial OnError Listener , ĊĠĠĠ Ġinitial On Connection Listener Ġ= Ġinitial On Connection Listener Ċ ), ĊĠĠĠ ĠIS rt Live Stream er Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBit rate Ġreg ulator . ĠCalls Ġregular ly Ġby Ġ[ scheduler ]. ĠDon 't Ġcall Ġit Ġotherwise Ġor Ġyou Ġmight Ġbreak Ġreg ulation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġbit rate Reg ulator Ġ= Ġbit rate Reg ulator Config ?. let Ġ{ Ġconfig Ġ-> ĊĠĠĠĠĠĠĠ Ġbit rate Reg ulator Factory ?. new Bit rate Reg ulator ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġsettings . video . bit rate Ġ= Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġsettings . audio . bit rate Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠS rt Bit rate Reg ulator ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScheduler Ġfor Ġbit rate Ġreg ulation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġscheduler Ġ= ĠScheduler ( 5 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbit rate Reg ulator ?. update ( s rt Producer . stats , Ġsettings . video . bit rate , Ġsettings . audio . bit rate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠUnsupportedOperationException (" Scheduler Ġruns Ġbut Ġno Ġbit rate Ġreg ulator Ġset ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġs rt Producer Ġ= Ġendpoint Ġas ĠS rt Producer ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet / set ĠS RT Ġstream ĠID . ĊĠĠĠĠ Ġ* Ġ** See :** Ġ[ S RT ĠSocket ĠOptions ]( https :// github . com / Ha iv ision / s rt / blob / master / docs / API / API - socket - options . md # sr to _ stream id ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġstream Id : ĠString ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet ĠS RT Ġstream ĠID ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġstream ĠID ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġs rt Producer . stream Id ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġstream ĠID ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs rt Producer . stream Id Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet / set ĠS RT Ġpassphrase . ĊĠĠĠĠ Ġ* Ġ** See :** Ġ[ S RT ĠSocket ĠOptions ]( https :// github . com / Ha iv ision / s rt / blob / master / docs / API / API - socket - options . md # sr to _ pass phrase ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġpass Phrase : ĠString ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGet ĠS RT Ġpassphrase ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġpassphrase ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġs rt Producer . pass Phrase ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġvalue Ġpassphrase ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs rt Producer . pass Phrase Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConnect Ġto Ġan ĠS RT Ġserver Ġwith Ġcorrect ĠLive Ġstreaming Ġparameters . ĊĠĠĠĠ Ġ* ĠTo Ġavoid Ġcreating Ġan Ġun responsive ĠUI , Ġdo Ġnot Ġcall Ġon Ġmain Ġthread . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġip Ġserver Ġip ĊĠĠĠĠ Ġ* Ġ@ param Ġport Ġserver Ġport ĊĠĠĠĠ Ġ* Ġ@ throws ĠException Ġif Ġconnection Ġhas Ġfailed Ġor Ġconfiguration Ġhas Ġfailed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġconnect ( ip : ĠString , Ġport : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġs rt Producer . connect ( ip , Ġport ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSame Ġas Ġ[ Base Camera Live Stream er . start Stream ] Ġbut Ġalso Ġstarts Ġbit rate Ġreg ulator . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġstart Stream () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bit rate Reg ulator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduler . start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . start Stream () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSame Ġas Ġ[ Base Camera Live Stream er . start Stream ] Ġbut Ġalso Ġstarts Ġbit rate Ġreg ulator . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġstart Stream ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( bit rate Reg ulator Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduler . start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . start Stream ( url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConnect Ġto Ġan ĠS RT Ġserver Ġand Ġstart Ġstream . ĊĠĠĠĠ Ġ* ĠSame Ġas Ġcalling Ġ[ connect ], Ġthen Ġ[ start Stream ]. ĊĠĠĠĠ Ġ* ĠTo Ġavoid Ġcreating Ġan Ġun responsive ĠUI , Ġdo Ġnot Ġcall Ġon Ġmain Ġthread . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġip Ġserver Ġip ĊĠĠĠĠ Ġ* Ġ@ param Ġport Ġserver Ġport ĊĠĠĠĠ Ġ* Ġ@ throws ĠException Ġif Ġconnection Ġhas Ġfailed Ġor Ġconfiguration Ġhas Ġfailed Ġor Ġ[ start Stream ] Ġhas Ġfailed Ġtoo . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġstart Stream ( ip : ĠString , Ġport : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconnect ( ip , Ġport ) ĊĠĠĠĠĠĠĠ Ġstart Stream () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSame Ġas Ġ[ Base Camera Live Stream er . stop Stream ] Ġbut Ġalso Ġstops Ġbit rate Ġreg ulator . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġstop Stream () Ġ{ ĊĠĠĠĠĠĠĠ Ġscheduler . cancel () ĊĠĠĠĠĠĠĠ Ġsuper . stop Stream () ĊĠĠĠ Ġ} Ċ } Ċ