Skip to content

Commit 81ea586

Browse files
google-ima-devrel-botIMA Developer Relations
authored and
IMA Developer Relations
committedMar 17, 2025·
Adds latency improvements to the sample apps
PiperOrigin-RevId: 737757210
1 parent a965713 commit 81ea586

File tree

9 files changed

+103
-23
lines changed

9 files changed

+103
-23
lines changed
 

Diff for: ‎AdvancedExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/MyActivity.java

+18
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import androidx.constraintlayout.widget.ConstraintLayout;
3232
import androidx.constraintlayout.widget.ConstraintSet;
3333
import androidx.fragment.app.Fragment;
34+
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory;
35+
import com.google.ads.interactivemedia.v3.api.ImaSdkSettings;
3436
import com.google.ads.interactivemedia.v3.samples.samplevideoplayer.SampleVideoPlayer;
3537
import java.net.CookieHandler;
3638
import java.net.CookieManager;
@@ -46,6 +48,8 @@ public class MyActivity extends AppCompatActivity {
4648
private static final String FALLBACK_STREAM_URL =
4749
"https://storage.googleapis.com/interactive-media-ads/media/bbb.m3u8";
4850
private static final String APP_LOG_TAG = "ImaDaiExample";
51+
private static final String PLAYER_TYPE = "DAISamplePlayer";
52+
private static ImaSdkSettings imaSdkSettings;
4953

5054
private SampleVideoPlayer videoPlayer;
5155
private SampleAdsWrapper sampleAdsWrapper;
@@ -69,6 +73,11 @@ protected void onCreate(Bundle savedInstanceState) {
6973
super.onCreate(savedInstanceState);
7074
setContentView(R.layout.activity_my);
7175

76+
// Initialize the IMA SDK as early as possible when the app starts. If your app already
77+
// overrides Application.onCreate(), call this method inside the onCreate() method.
78+
// https://developer.android.com/topic/performance/vitals/launch-time#app-creation
79+
ImaSdkFactory.getInstance().initialize(this, getImaSdkSettings());
80+
7281
if (CookieHandler.getDefault() != DEFAULT_COOKIE_MANAGER) {
7382
CookieHandler.setDefault(DEFAULT_COOKIE_MANAGER);
7483
}
@@ -285,4 +294,13 @@ public void onDestroyView() {
285294
}
286295
}
287296
}
297+
298+
public static ImaSdkSettings getImaSdkSettings() {
299+
if (imaSdkSettings == null) {
300+
imaSdkSettings = ImaSdkFactory.getInstance().createImaSdkSettings();
301+
imaSdkSettings.setPlayerType(PLAYER_TYPE);
302+
// Set any additional IMA SDK settings here.
303+
}
304+
return imaSdkSettings;
305+
}
288306
}

Diff for: ‎AdvancedExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/SampleAdsWrapper.java

+2-7
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent;
2626
import com.google.ads.interactivemedia.v3.api.CuePoint;
2727
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory;
28-
import com.google.ads.interactivemedia.v3.api.ImaSdkSettings;
2928
import com.google.ads.interactivemedia.v3.api.StreamDisplayContainer;
3029
import com.google.ads.interactivemedia.v3.api.StreamManager;
3130
import com.google.ads.interactivemedia.v3.api.StreamRequest;
@@ -40,8 +39,6 @@
4039
public class SampleAdsWrapper
4140
implements AdEvent.AdEventListener, AdErrorEvent.AdErrorListener, AdsLoader.AdsLoadedListener {
4241

43-
private static final String PLAYER_TYPE = "DAISamplePlayer";
44-
4542
/** Log interface, so we can output the log commands to the UI or similar. */
4643
public interface Logger {
4744
void log(String logMessage);
@@ -79,9 +76,6 @@ public SampleAdsWrapper(Context context, SampleVideoPlayer videoPlayer, ViewGrou
7976
}
8077

8178
private void createAdsLoader() {
82-
ImaSdkSettings settings = sdkFactory.createImaSdkSettings();
83-
// Change any settings as necessary here.
84-
settings.setPlayerType(PLAYER_TYPE);
8579
VideoStreamPlayer videoStreamPlayer = createVideoStreamPlayer();
8680
StreamDisplayContainer displayContainer =
8781
ImaSdkFactory.createStreamDisplayContainer(adUiContainer, videoStreamPlayer);
@@ -145,7 +139,8 @@ public void onVolumeChanged(int percentage) {
145139
}
146140
}
147141
});
148-
adsLoader = sdkFactory.createAdsLoader(context, settings, displayContainer);
142+
adsLoader =
143+
sdkFactory.createAdsLoader(context, MyActivity.getImaSdkSettings(), displayContainer);
149144
}
150145

151146
public void requestAndPlayAds(

Diff for: ‎BasicExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/MyActivity.java

+19
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import android.widget.ImageButton;
2626
import android.widget.ScrollView;
2727
import android.widget.TextView;
28+
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory;
29+
import com.google.ads.interactivemedia.v3.api.ImaSdkSettings;
2830
import com.google.ads.interactivemedia.v3.samples.samplevideoplayer.SampleVideoPlayer;
2931

3032
/** Main Activity that plays media using {@link SampleVideoPlayer}. */
@@ -35,6 +37,8 @@ public class MyActivity extends Activity {
3537
private static final String DEFAULT_STREAM_URL =
3638
"https://storage.googleapis.com/interactive-media-ads/media/bbb.m3u8";
3739
private static final String APP_LOG_TAG = "ImaDaiExample";
40+
private static final String PLAYER_TYPE = "DAISamplePlayer";
41+
private static ImaSdkSettings imaSdkSettings;
3842

3943
protected SampleVideoPlayer sampleVideoPlayer;
4044
protected ImageButton playButton;
@@ -45,6 +49,12 @@ public class MyActivity extends Activity {
4549
protected void onCreate(Bundle savedInstanceState) {
4650
super.onCreate(savedInstanceState);
4751
setContentView(R.layout.activity_my);
52+
53+
// Initialize the IMA SDK as early as possible when the app starts. If your app already
54+
// overrides Application.onCreate(), call this method inside the onCreate() method.
55+
// https://developer.android.com/topic/performance/vitals/launch-time#app-creation
56+
ImaSdkFactory.getInstance().initialize(this, getImaSdkSettings());
57+
4858
View rootView = findViewById(R.id.videoLayout);
4959
sampleVideoPlayer =
5060
new SampleVideoPlayer(rootView.getContext(), rootView.findViewById(R.id.playerView));
@@ -115,4 +125,13 @@ public void onResume() {
115125
sampleVideoPlayer.enableControls(false);
116126
}
117127
}
128+
129+
public static ImaSdkSettings getImaSdkSettings() {
130+
if (imaSdkSettings == null) {
131+
imaSdkSettings = ImaSdkFactory.getInstance().createImaSdkSettings();
132+
imaSdkSettings.setPlayerType(PLAYER_TYPE);
133+
// Set any additional IMA SDK settings here.
134+
}
135+
return imaSdkSettings;
136+
}
118137
}

Diff for: ‎BasicExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/SampleAdsWrapper.java

+2-5
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import com.google.ads.interactivemedia.v3.api.AdsManagerLoadedEvent;
2828
import com.google.ads.interactivemedia.v3.api.CuePoint;
2929
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory;
30-
import com.google.ads.interactivemedia.v3.api.ImaSdkSettings;
3130
import com.google.ads.interactivemedia.v3.api.StreamDisplayContainer;
3231
import com.google.ads.interactivemedia.v3.api.StreamManager;
3332
import com.google.ads.interactivemedia.v3.api.StreamRequest;
@@ -112,9 +111,6 @@ private void enableWebViewDebugging() {
112111
}
113112

114113
private void createAdsLoader() {
115-
ImaSdkSettings settings = sdkFactory.createImaSdkSettings();
116-
// Change any settings as necessary here.
117-
settings.setPlayerType(PLAYER_TYPE);
118114
enableWebViewDebugging();
119115
VideoStreamPlayer videoStreamPlayer = createVideoStreamPlayer();
120116
StreamDisplayContainer displayContainer =
@@ -169,7 +165,8 @@ public void onVolumeChanged(int percentage) {
169165
}
170166
}
171167
});
172-
adsLoader = sdkFactory.createAdsLoader(context, settings, displayContainer);
168+
adsLoader =
169+
sdkFactory.createAdsLoader(context, MyActivity.getImaSdkSettings(), displayContainer);
173170
}
174171

175172
public void requestAndPlayAds() {

Diff for: ‎CloudVideoStitcherExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/MyActivity.java

+19
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import android.widget.ImageButton;
2626
import android.widget.ScrollView;
2727
import android.widget.TextView;
28+
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory;
29+
import com.google.ads.interactivemedia.v3.api.ImaSdkSettings;
2830
import com.google.ads.interactivemedia.v3.samples.samplevideoplayer.SampleVideoPlayer;
2931

3032
/** Main Activity that plays media using {@link SampleVideoPlayer}. */
@@ -35,6 +37,8 @@ public class MyActivity extends Activity {
3537
private static final String DEFAULT_STREAM_URL =
3638
"https://storage.googleapis.com/interactive-media-ads/media/bbb.m3u8";
3739
private static final String APP_LOG_TAG = "ImaDaiExample";
40+
private static final String PLAYER_TYPE = "DAISamplePlayer";
41+
private static ImaSdkSettings imaSdkSettings;
3842

3943
/** An interface defining how this class emits log messages. */
4044
public interface Logger {
@@ -68,6 +72,11 @@ protected void onCreate(Bundle savedInstanceState) {
6872
super.onCreate(savedInstanceState);
6973
setContentView(R.layout.activity_my);
7074

75+
// Initialize the IMA SDK as early as possible when the app starts. If your app already
76+
// overrides Application.onCreate(), call this method inside the onCreate() method.
77+
// https://developer.android.com/topic/performance/vitals/launch-time#app-creation
78+
ImaSdkFactory.getInstance().initialize(this, getImaSdkSettings());
79+
7180
initializeLogger();
7281

7382
sampleVideoPlayer = new SampleVideoPlayer(MyActivity.this, findViewById(R.id.playerView));
@@ -118,4 +127,14 @@ public void onResume() {
118127
sampleVideoPlayer.play();
119128
}
120129
}
130+
131+
public static ImaSdkSettings getImaSdkSettings() {
132+
if (imaSdkSettings == null) {
133+
imaSdkSettings = ImaSdkFactory.getInstance().createImaSdkSettings();
134+
imaSdkSettings.setPlayerType(PLAYER_TYPE);
135+
imaSdkSettings.setDebugMode(true);
136+
// Set any additional IMA SDK settings here.
137+
}
138+
return imaSdkSettings;
139+
}
121140
}

Diff for: ‎CloudVideoStitcherExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/SampleAdsWrapper.java

+2-5
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import com.google.ads.interactivemedia.v3.api.AdsRenderingSettings;
2727
import com.google.ads.interactivemedia.v3.api.CuePoint;
2828
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory;
29-
import com.google.ads.interactivemedia.v3.api.ImaSdkSettings;
3029
import com.google.ads.interactivemedia.v3.api.StreamDisplayContainer;
3130
import com.google.ads.interactivemedia.v3.api.StreamManager;
3231
import com.google.ads.interactivemedia.v3.api.StreamRequest;
@@ -99,9 +98,6 @@ public SampleAdsWrapper(
9998
}
10099

101100
private AdsLoader createAdsLoader() {
102-
ImaSdkSettings settings = sdkFactory.createImaSdkSettings();
103-
// Change any settings as necessary here.
104-
settings.setDebugMode(true);
105101
VideoStreamPlayer videoStreamPlayer = createVideoStreamPlayer();
106102
StreamDisplayContainer displayContainer =
107103
ImaSdkFactory.createStreamDisplayContainer(adUiContainer, videoStreamPlayer);
@@ -155,7 +151,8 @@ public void onVolumeChanged(int percentage) {
155151
}
156152
}
157153
});
158-
AdsLoader adsLoader = sdkFactory.createAdsLoader(context, settings, displayContainer);
154+
AdsLoader adsLoader =
155+
sdkFactory.createAdsLoader(context, MyActivity.getImaSdkSettings(), displayContainer);
159156
adsLoader.addAdErrorListener(SampleAdsWrapper.this);
160157
adsLoader.addAdsLoadedListener(SampleAdsWrapper.this);
161158
return adsLoader;

Diff for: ‎ExoPlayerExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/MyActivity.java

+20-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import androidx.media3.ui.PlayerView;
2222
import androidx.multidex.MultiDex;
2323
import com.google.ads.interactivemedia.v3.api.AdEvent;
24+
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory;
25+
import com.google.ads.interactivemedia.v3.api.ImaSdkSettings;
2426

2527
/** Main Activity. */
2628
@SuppressLint("UnsafeOptInUsageError")
@@ -36,13 +38,19 @@ public class MyActivity extends Activity {
3638
private ExoPlayer player;
3739
private ImaServerSideAdInsertionMediaSource.AdsLoader adsLoader;
3840
private ImaServerSideAdInsertionMediaSource.AdsLoader.State adsLoaderState;
41+
private ImaSdkSettings imaSdkSettings;
3942

4043
@Override
4144
protected void onCreate(@Nullable Bundle savedInstanceState) {
4245
super.onCreate(savedInstanceState);
4346
setContentView(R.layout.activity_my);
4447
MultiDex.install(this);
4548

49+
// Initialize the IMA SDK as early as possible when the app starts. If your app already
50+
// overrides Application.onCreate(), call this method inside the onCreate() method.
51+
// https://developer.android.com/topic/performance/vitals/launch-time#app-creation
52+
ImaSdkFactory.getInstance().initialize(this, getImaSdkSettings());
53+
4654
playerView = findViewById(R.id.player_view);
4755

4856
// Checks if there is a saved AdsLoader state to be used later when initiating the AdsLoader.
@@ -127,7 +135,10 @@ private ImaServerSideAdInsertionMediaSource.AdsLoader createAdsLoader() {
127135
adsLoaderBuilder.setAdsLoaderState(adsLoaderState);
128136
}
129137

130-
return adsLoaderBuilder.setAdEventListener(buildAdEventListener()).build();
138+
return adsLoaderBuilder
139+
.setAdEventListener(buildAdEventListener())
140+
.setImaSdkSettings(getImaSdkSettings())
141+
.build();
131142
}
132143

133144
public AdEvent.AdEventListener buildAdEventListener() {
@@ -186,4 +197,12 @@ private void initializePlayer() {
186197
// Set PlayWhenReady. If true, content and ads will autoplay.
187198
player.setPlayWhenReady(false);
188199
}
200+
201+
private ImaSdkSettings getImaSdkSettings() {
202+
if (imaSdkSettings == null) {
203+
imaSdkSettings = ImaSdkFactory.getInstance().createImaSdkSettings();
204+
// Set any IMA SDK settings here.
205+
}
206+
return imaSdkSettings;
207+
}
189208
}

Diff for: ‎PodServingExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/MyActivity.java

+19
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import android.widget.ImageButton;
2626
import android.widget.ScrollView;
2727
import android.widget.TextView;
28+
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory;
29+
import com.google.ads.interactivemedia.v3.api.ImaSdkSettings;
2830
import com.google.ads.interactivemedia.v3.samples.samplevideoplayer.SampleVideoPlayer;
2931

3032
/** Main Activity that plays media using {@link SampleVideoPlayer}. */
@@ -35,6 +37,8 @@ public class MyActivity extends Activity {
3537
private static final String DEFAULT_STREAM_URL =
3638
"https://storage.googleapis.com/interactive-media-ads/media/bbb.m3u8";
3739
private static final String APP_LOG_TAG = "ImaDaiExample";
40+
private static final String PLAYER_TYPE = "DAISamplePlayer";
41+
private static ImaSdkSettings imaSdkSettings;
3842

3943
/** An interface defining how this class emits log messages. */
4044
public interface Logger {
@@ -68,6 +72,11 @@ protected void onCreate(Bundle savedInstanceState) {
6872
super.onCreate(savedInstanceState);
6973
setContentView(R.layout.activity_my);
7074

75+
// Initialize the IMA SDK as early as possible when the app starts. If your app already
76+
// overrides Application.onCreate(), call this method inside the onCreate() method.
77+
// https://developer.android.com/topic/performance/vitals/launch-time#app-creation
78+
ImaSdkFactory.getInstance().initialize(this, getImaSdkSettings());
79+
7180
initializeLogger();
7281

7382
sampleVideoPlayer = new SampleVideoPlayer(MyActivity.this, findViewById(R.id.playerView));
@@ -118,4 +127,14 @@ public void onResume() {
118127
sampleVideoPlayer.play();
119128
}
120129
}
130+
131+
public static ImaSdkSettings getImaSdkSettings() {
132+
if (imaSdkSettings == null) {
133+
imaSdkSettings = ImaSdkFactory.getInstance().createImaSdkSettings();
134+
imaSdkSettings.setPlayerType(PLAYER_TYPE);
135+
imaSdkSettings.setDebugMode(true);
136+
// Set any additional IMA SDK settings here.
137+
}
138+
return imaSdkSettings;
139+
}
121140
}

Diff for: ‎PodServingExample/app/src/main/java/com/google/ads/interactivemedia/v3/samples/videoplayerapp/SampleAdsWrapper.java

+2-5
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import com.google.ads.interactivemedia.v3.api.AdsRenderingSettings;
2727
import com.google.ads.interactivemedia.v3.api.CuePoint;
2828
import com.google.ads.interactivemedia.v3.api.ImaSdkFactory;
29-
import com.google.ads.interactivemedia.v3.api.ImaSdkSettings;
3029
import com.google.ads.interactivemedia.v3.api.StreamDisplayContainer;
3130
import com.google.ads.interactivemedia.v3.api.StreamManager;
3231
import com.google.ads.interactivemedia.v3.api.StreamRequest;
@@ -93,9 +92,6 @@ public SampleAdsWrapper(
9392
}
9493

9594
private AdsLoader createAdsLoader() {
96-
ImaSdkSettings settings = sdkFactory.createImaSdkSettings();
97-
// Change any settings as necessary here.
98-
settings.setDebugMode(true);
9995
VideoStreamPlayer videoStreamPlayer = createVideoStreamPlayer();
10096
StreamDisplayContainer displayContainer =
10197
ImaSdkFactory.createStreamDisplayContainer(adUiContainer, videoStreamPlayer);
@@ -149,7 +145,8 @@ public void onVolumeChanged(int percentage) {
149145
}
150146
}
151147
});
152-
AdsLoader adsLoader = sdkFactory.createAdsLoader(context, settings, displayContainer);
148+
AdsLoader adsLoader =
149+
sdkFactory.createAdsLoader(context, MyActivity.getImaSdkSettings(), displayContainer);
153150
adsLoader.addAdErrorListener(SampleAdsWrapper.this);
154151
adsLoader.addAdsLoadedListener(SampleAdsWrapper.this);
155152
return adsLoader;

0 commit comments

Comments
 (0)
Please sign in to comment.