package Ġcom . example . milestone . playback sample Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġcom . m ilestones ys . mip sdk mobile . communication . Communication Command Ċ import Ġjava . util .* Ċ Ċ import Ġcom . m ilestones ys . mip sdk mobile . callbacks . Video Receiver Ċ import Ġcom . m ilestones ys . mip sdk mobile . communication . Video Command Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġjava . io . ByteArray InputStream Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . widget . Image Button Ċ import Ġandroid . widget . ImageView Ċ import Ġcom . m ilestones ys . mip sdk mobile . communication . Live Video Ċ import Ġcom . m ilestones ys . mip sdk mobile . communication . Playback Video Ċ Ċ /** Ċ Ġ* ĠActivity Ġthat Ġis Ġplaying Ġplayback Ġvideo Ġusing ĠM IP SDK Mobile Ċ Ġ*/ Ċ class ĠPlay back Activity Ġ: ĠAppCompatActivity (), ĠVideo Receiver Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġapplication Object : ĠSDK Sample Application ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcamera Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcamera Id : ĠUUID ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbmp : ĠBitmap ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġvideo View : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġplayback Video : ĠPlay back Video ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġparam User Down Sampling Ġ= Ġ" No " ĊĠĠĠ Ġprivate Ġval Ġparam Resize Available Ġ= Ġ" Yes " ĊĠĠĠ Ġprivate Ġval Ġparam F ps Ġ= Ġ" 8 " ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ playback ) ĊĠĠĠĠĠĠĠ Ġ// Image Ġview Ġto Ġshow Ġvideo Ġon ĊĠĠĠĠĠĠĠ Ġvideo View Ġ= ĠfindViewById ( R . id . video _ view ) ĊĠĠĠĠĠĠĠ Ġapplication Object Ġ= Ġapplication Ġas ĠSDK Sample Application ? ĊĊĠĠĠĠĠĠĠ Ġ// Parsing Ġdata Ġfrom Ġthe Ġintent Ġto Ġrequest Ġvideo ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Intent Ġ= Ġintent ĊĊĠĠĠĠĠĠĠ Ġcamera Name Ġ= Ġcurrent Intent . getString Extra ( PARAM _ CAMERA _ NAME ) ĊĠĠĠĠĠĠĠ Ġcamera Id Ġ= ĠUUID . fromString ( current Intent . getString Extra ( PARAM _ CAMERA _ ID )) ĊĊĠĠĠĠĠĠĠ ĠsetUp Video Playback () ĊĠĠĠĠĠĠĠ ĠsetUp Buttons () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Video Playback () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Setting Ġup Ġvideo Ġsettings ĊĠĠĠĠĠĠĠ Ġval Ġvideo Props Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġvideo Props [ Communication Command . PARAM _ WIDTH ] Ġ= Ġvideo View ?. width . toString () ĊĠĠĠĠĠĠĠ Ġvideo Props [ Communication Command . PARAM _ HEIGHT ] Ġ= Ġvideo View ?. height . toString () ĊĠĠĠĠĠĠĠ Ġvideo Props [ Communication Command . PARAM _ USER _ DO WNS AMP LING ] Ġ= Ġparam User Down Sampling ĊĠĠĠĠĠĠĠ Ġvideo Props [ Communication Command . PARAM _ RE SIZE _ AVAILABLE ] Ġ= Ġparam Resize Available ĊĊĠĠĠĠĠĠĠ Ġ// Setting Ġup Ġvideo Ġchannel Ġproperties ĊĠĠĠĠĠĠĠ Ġval Ġall Properties Ġ= ĠHashMap < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġall Properties [ Live Video . CAMERA _ ID _ PROPERTY ] Ġ= Ġcamera Id . toString () ĊĠĠĠĠĠĠĠ Ġall Properties [ Live Video . VIDEO _ PROPERTIES ] Ġ= Ġvideo Props ĊĠĠĠĠĠĠĠ Ġall Properties [ Live Video . FPS _ PROPERTY ] Ġ= Ġparam F ps ĊĊĠĠĠĠĠĠĠ ĠThread ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayback Video Ġ= Ġapplication Object ?. mip Sdk Mobile ?. request Playback Video ( this , Ġall Properties ) ĊĠĠĠĠĠĠĠ Ġ}). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Video () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvideo Id Ġ= Ġplayback Video ?. video Id ĊĠĠĠĠĠĠĠ Ġif Ġ(! video Id . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Object ?. mip Sdk Mobile ?. stop Video Stream ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Id , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Buttons () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Adding Ġplay Ġforward Ġbutton Ġclick Ġlistener ĊĠĠĠĠĠĠĠ Ġval Ġbtn Forward Ġ= ĠfindViewById < Image Button >( R . id . play _ forward s ) ĊĠĠĠĠĠĠĠ Ġbtn Forward . setOnClickListener Ġ{ Ġ// M akes Ġplay Ġforward Ġcall Ġin Ġseparate Ġthread Ġvia Ġthe Ġplayback Ġobject ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread ( Runnable Ġ{ Ġplayback Video ?. Play Forward () Ġ}). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Adding Ġplay Ġbackward Ġbutton Ġclick Ġlistener ĊĠĠĠĠĠĠĠ Ġval Ġbtn Backward Ġ= ĠfindViewById < Image Button >( R . id . play _ back wards ) ĊĠĠĠĠĠĠĠ Ġbtn Backward . setOnClickListener Ġ{ Ġ// M akes Ġplay Ġbackward Ġcall Ġin Ġseparate Ġthread Ġvia Ġthe Ġplayback Ġobject ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread ( Runnable Ġ{ Ġplayback Video ?. Play Backward () Ġ}). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Adding Ġpause Ġbutton Ġclick Ġlistener ĊĠĠĠĠĠĠĠ Ġval Ġbtn Pause Ġ= ĠfindViewById < Image Button >( R . id . pause ) ĊĠĠĠĠĠĠĠ Ġbtn Pause . setOnClickListener Ġ{ Ġ// M akes Ġpause Ġcall Ġin Ġseparate Ġthread Ġvia Ġthe Ġplayback Ġobject ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread ( Runnable Ġ{ Ġplayback Video ?. Pause () Ġ}). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ ĠThread ( Runnable Ġ{ Ġplayback Video ?. Pause () Ġ}). start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġstop Video () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġresponse Ġfrom ĠByteArrayInputStream Ġto Ġbitmap Ġand Ġpresents Ġit Ġin ĠimageView ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġreceive Video ( video Command : ĠVideo Command ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( video Command . payload Size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= ĠByteArrayInputStream ( video Command . payload , Ġ 0 , Ġvideo Command . payload Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbmp Ġ= ĠBitmap Factory . decode Stream ( inputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bmp Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo View ?. setImage Bitmap ( bmp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠOut Of Memory Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ