package Ġcom . pi . p ano . sample . live Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Surface Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . pi . p ano . Change Resolution Listener Ċ import Ġcom . pi . p ano . P ano SDK Listener Ċ import Ġcom . pi . p ano . Pilot SDK Ċ import Ġcom . pi . p ano . annotation . Pi Preview Mode Ċ import Ġcom . pi . p ano . annotation . Pi Push Resolution Ċ import Ġcom . pi . p ano . helper . Preview Helper Ċ import Ġcom . pi . pip ush er . IP ush er Ċ import Ġcom . pi . pip ush er . IP ush er Encode Video Lister ner Ċ import Ġcom . pi . pip ush er . IP ush er State Lister ner Ċ import Ġcom . pi . pip ush er . Push er Factory Ċ Ċ private Ġval ĠTAG Ġ= ĠMainActivity :: class . java . simple Name Ċ Ċ /** Ċ Ġ* ĠThis Ġexample Ġshows Ġthe Ġgeneral Ġprocess Ġof Ġlive Ġbroadcast Ġat Ġ 4 k Ġand Ġbelow Ġresolution s . Ċ Ġ* ĠAt Ġpresent , Ġmost Ġlive Ġbroadcast Ġplatforms Ġcan Ġaccept Ġresolution s Ġof Ġ 4 k Ġand Ġbelow . Ċ Ġ*/ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Pilot SDK : ĠPi lot SDK ĊĠĠĠ Ġprivate Ġvar Ġis Running : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Push er : ĠIP ush er ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġsetup P ano () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup P ano () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup Ġp ano Ġinto Ġyour Ġview Ġcontainers ĊĠĠĠĠĠĠĠ Ġm Pilot SDK Ġ= ĠPreview Helper . init P ano View ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById ( R . id . vg _ preview ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠP ano SDK Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon P ano Create () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠYou Ġcan Ġget Ġth ie Ġpreview Ġpicture Ġand Ġset Ġthe Ġparameters Ġfor Ġit Ġto Ġyour Ġneeds . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Preview Parameter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon P ano Release () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChange Preview Mode ( mode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Single Tap () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Encode Frame ( count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Preview Parameter () Ġ{ ĊĠĠĠĠĠĠĠ ĠPreview Helper . change Camera Resolution For Live ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPi Push Resolution ._ 4 K _ QUAL ITY Ġ// Ġthe Ġresolution Ġyou Ġneed , Ġit Ġincludes Ġthe Ġframe Ġrate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, Ġobject Ġ: ĠChange Resolution Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChange Resolution ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" change Ġresolution Ġto :${ width } * ${ height }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġset Ġpreview Ġmode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPi lot SDK . set Preview Mode ( Pi Preview Mode . planet , Ġ 0 F , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick Live ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Push (" rt mp :// 1 9 2 . 1 6 8 . 8 . 1 6 3 : 1 9 3 6 / live / 4 k _ live ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Running Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Push () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Running Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview . isSelected Ġ= Ġis Running ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Push ( push URL : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// åĪĽå»º æİ¨ æµģ å¯¹è±¡ ĊĠĠĠĠĠĠĠ Ġm Push er Ġ= ĠPush er Factory . create Push er () ĊĊĠĠĠĠĠĠĠ Ġ// è®¾ç½® è§Ĩé¢ĳ åıĤæķ° ĊĠĠĠĠĠĠĠ Ġm Push er . add Video Track Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIP ush er . EN CODER _ ID _ H 2 6 4 , Ġ 3 8 4 0 , Ġ 1 9 2 0 , Ġ 2 4 , Ġ 1 2 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// è®¾ç½® éŁ³ é¢ĳ åıĤæķ° ĊĠĠĠĠĠĠĠ Ġm Push er . add Audio Track Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIP ush er . AUDIO _ SOURCE _ ID _ MIC , ĠIP ush er . EN CODER _ ID _ AAC , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 8 0 0 0 , Ġ 2 , Ġ 1 6 , Ġ 1 2 8 0 0 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġm Push er . add Output ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIP ush er . OUTPUT _ TYPE _ RT MP , Ġpush URL , Ġ 5 0 0 0 Ġ// 5 Ġseconds Ġtimeout ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// è®¾ç½® ç¼ĸçłģ åĽŀè°ĥ ĊĠĠĠĠĠĠĠ Ġm Push er . set Encode Video Lister ner ( object Ġ: ĠIP ush er Encode Video Lister ner Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinit Ġ= Ġfalse ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate Surface ( stream Name : ĠString , Ġsurface : ĠSurface ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" update Surface , stream Name :$ stream Name ,$ surface " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! init ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPi lot SDK . set Encode Input Surface For Live ( surface ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// m Push er . add OutputFile ( IP ush er . OUTPUT _ TYPE _ MP 4 , ĠfilePath , Ġ 3 6 0 0 ) Ġ// Ġkeep Ġthe Ġlive Ġvideo Ġas Ġa Ġfile Ġat Ġthe Ġsame Ġtime ĊĊĠĠĠĠĠĠĠ Ġm Push er . start ( object Ġ: ĠIP ush er State Lister ner Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnotify Push er State ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate : ĠIP ush er State Lister ner . Push er State , ĠerrorCode : ĠInt , Ġmessage : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , Ġ" notify Push er State , state :$ state , errorCode :$ errorCode , message :$ message " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Push () Ġ{ ĊĠĠĠĠĠĠĠ ĠPi lot SDK . set Encode Input Surface For Live ( null ) ĊĠĠĠĠĠĠĠ Ġm Push er . stop () ĊĠĠĠ Ġ} Ċ } Ċ