I have the following code (which works on different parts of my app but doesn't work well in a recyclerview).
as it says in the title - I hear the sound of the video or the ad (even the controllers and ad buttons) but not the video itself (the video link is great, checked it with the same player in different places in the app.
if (loadControl == null) {
loadControl = new DefaultLoadControl.Builder().
setAllocator(new DefaultAllocator(true, 16)).
setBufferDurationsMs(VideoPlayerConfig.MIN_BUFFER_DURATION,
VideoPlayerConfig.MAX_BUFFER_DURATION,
VideoPlayerConfig.MIN_PLAYBACK_START_BUFFER,
VideoPlayerConfig.MIN_PLAYBACK_RESUME_BUFFER).
setTargetBufferBytes(50).
setPrioritizeTimeOverSizeThresholds(true).
createDefaultLoadControl();
}
GameCenterHandsetDetailsFragment.player = ExoPlayerFactory.newSimpleInstance(/*App.getInstance(),*/
new DefaultRenderersFactory(App.getInstance()),
new DefaultTrackSelector(),
loadControl);
GameCenterHandsetDetailsFragment.player.prepare(
buildMediaSource(
MonetizationMgr.getSettings().getTermInSettingsMoreSettings("STICKY_VIDEO_NEWS_SOURCE"),
imaTag, myHolder));
GameCenterHandsetDetailsFragment.player.addAnalyticsListener(new EventLogger(/* trackSelector= */ null));
GameCenterHandsetDetailsFragment.player.addListener(this);
myHolder.playerView.setPlayer(GameCenterHandsetDetailsFragment.player);
myHolder.playerView.setVisibility(View.VISIBLE);
myHolder.playerView.setControllerHideDuringAds(false);
myHolder.playerView.setUseController(false); private MediaSource buildMediaSource(String videoUrl, String tag, ViewHolder myHolder) {
MediaSource RetVal = null;
try {
DefaultDataSourceFactory dataSourceFactory =
new DefaultDataSourceFactory(App.getInstance(),
Util.getUserAgent(App.getInstance(),
App.getInstance().getString(R.string.app_name)));
MediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory).setExtractorsFactory
(new DefaultExtractorsFactory()).createMediaSource(Uri.parse(videoUrl));
if (tag != null) {
RetVal = new AdsMediaSource(mediaSource, dataSourceFactory, getImaAdsLoader(tag, myHolder.playerView),
myHolder.playerView.getOverlayFrameLayout());
}
NewsCenterActivity.sendRequestAdVideos("LMT", "1");
} catch (Exception e) {
e.printStackTrace();
}
return RetVal;
}
private AdsLoader getImaAdsLoader(String tag, PlayerView playerView) {
ImaAdsLoader adsLoader = null;
try {
Uri uri = Uri.parse(tag);
ImaSdkSettings imaSdkSettings = ImaSdkFactory.getInstance().createImaSdkSettings();
/** autoplay **/
if (MonetizationMgr.getSettings().getTermInSettingsMoreSettings("") != null &&
Boolean.valueOf(MonetizationMgr.getSettings().getTermInSettingsMoreSettings("")))
{
imaSdkSettings.setAutoPlayAdBreaks(true);
} else {
imaSdkSettings.setAutoPlayAdBreaks(false);
}
imaSdkSettings.setDebugMode(true);
ImaAdsLoader.Builder adsBuilder = new ImaAdsLoader.Builder(App.getInstance());
adsBuilder.setImaSdkSettings(imaSdkSettings)
.setVastLoadTimeoutMs(30 * 1000);
adsBuilder.setAdEventListener(new LmtEventListener(this, playerView));
adsLoader = adsBuilder.buildForAdTag(uri);
} catch (Exception e) {
e.printStackTrace();
}
return adsLoader;
}
as well I am getting the following from Logcat:
2019-11-12 21:06:12.374 15360-15401/? E/chromium: [ERROR:tile_manager.cc(779)] WARNING: tile memory limits exceeded, some content may not draw
I am using the following version in gradle:
//ExoPlayer
implementation 'com.google.android.exoplayer:extension-ima:r2.8.4'
implementation 'com.google.android.exoplayer:exoplayer:2.8.4'