From 935b42c88f0489b0e2c02f9a4509534823e755cb Mon Sep 17 00:00:00 2001 From: Christine Emrich Date: Wed, 19 Jul 2017 12:25:32 +0200 Subject: [PATCH] List stream qualities WIP --- .../code/zapp/ChannelDetailActivity.java | 11 ++- .../code/zapp/utils/video/TrackHelper.java | 69 +++++++++++++++++++ .../utils/{ => video}/VideoErrorHandler.java | 2 +- 3 files changed, 78 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/de/christinecoenen/code/zapp/utils/video/TrackHelper.java rename app/src/main/java/de/christinecoenen/code/zapp/utils/{ => video}/VideoErrorHandler.java (98%) diff --git a/app/src/main/java/de/christinecoenen/code/zapp/ChannelDetailActivity.java b/app/src/main/java/de/christinecoenen/code/zapp/ChannelDetailActivity.java index fdbb377e..d07985b6 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/ChannelDetailActivity.java +++ b/app/src/main/java/de/christinecoenen/code/zapp/ChannelDetailActivity.java @@ -34,7 +34,6 @@ import com.google.android.exoplayer2.trackselection.AdaptiveTrackSelection; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.trackselection.TrackSelection; import com.google.android.exoplayer2.trackselection.TrackSelectionArray; -import com.google.android.exoplayer2.trackselection.TrackSelector; import com.google.android.exoplayer2.ui.SimpleExoPlayerView; import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; @@ -52,7 +51,8 @@ import de.christinecoenen.code.zapp.model.json.SortableJsonChannelList; import de.christinecoenen.code.zapp.utils.ColorHelper; import de.christinecoenen.code.zapp.utils.MultiWindowHelper; import de.christinecoenen.code.zapp.utils.ShortcutHelper; -import de.christinecoenen.code.zapp.utils.VideoErrorHandler; +import de.christinecoenen.code.zapp.utils.video.TrackHelper; +import de.christinecoenen.code.zapp.utils.video.VideoErrorHandler; import de.christinecoenen.code.zapp.utils.view.ClickableViewPager; import de.christinecoenen.code.zapp.utils.view.FullscreenActivity; import de.christinecoenen.code.zapp.views.ProgramInfoViewBase; @@ -93,6 +93,8 @@ public class ChannelDetailActivity extends FullscreenActivity implements private final Handler playHandler = new Handler(); private final VideoErrorHandler videoErrorHandler = new VideoErrorHandler(this); private SimpleExoPlayer player; + private DefaultTrackSelector trackSelector; + private TrackHelper trackHelper; private DataSource.Factory dataSourceFactory; private ChannelDetailAdapter channelDetailAdapter; private ChannelModel currentChannel; @@ -165,13 +167,14 @@ public class ChannelDetailActivity extends FullscreenActivity implements // player DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter); - TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory); + trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory); dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, getString(R.string.app_name)), bandwidthMeter); player = ExoPlayerFactory.newSimpleInstance(this, trackSelector); player.addListener(this); player.addListener(videoErrorHandler); videoView.setPlayer(player); + trackHelper = new TrackHelper(player, trackSelector); // pager channelDetailAdapter = new ChannelDetailAdapter( @@ -300,6 +303,8 @@ public class ChannelDetailActivity extends FullscreenActivity implements Log.d(TAG, "media player rendering start"); progressView.setVisibility(View.GONE); channelDetailAdapter.getCurrentFragment().onVideoStart(); + + trackHelper.printTrackInfo(); } } diff --git a/app/src/main/java/de/christinecoenen/code/zapp/utils/video/TrackHelper.java b/app/src/main/java/de/christinecoenen/code/zapp/utils/video/TrackHelper.java new file mode 100644 index 00000000..9cbc892d --- /dev/null +++ b/app/src/main/java/de/christinecoenen/code/zapp/utils/video/TrackHelper.java @@ -0,0 +1,69 @@ +package de.christinecoenen.code.zapp.utils.video; + + +import android.util.Log; + +import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.Format; +import com.google.android.exoplayer2.RendererCapabilities; +import com.google.android.exoplayer2.SimpleExoPlayer; +import com.google.android.exoplayer2.source.TrackGroup; +import com.google.android.exoplayer2.source.TrackGroupArray; +import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; +import com.google.android.exoplayer2.trackselection.FixedTrackSelection; +import com.google.android.exoplayer2.trackselection.MappingTrackSelector; + +public class TrackHelper { + + private static final String TAG = TrackHelper.class.getSimpleName(); + + private final SimpleExoPlayer player; + private final DefaultTrackSelector trackSelector; + + public TrackHelper(SimpleExoPlayer player, DefaultTrackSelector trackSelector) { + this.player = player; + this.trackSelector = trackSelector; + } + + public void printTrackInfo() { + MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo(); + if (mappedTrackInfo == null) { + Log.d(TAG, "no track info available"); + return; + } + + for (int rendererIndex = 0; rendererIndex < mappedTrackInfo.length; rendererIndex++) { + TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(rendererIndex); + int trackType = player.getRendererType(rendererIndex); + + // only use video renderers + if (trackType == C.TRACK_TYPE_VIDEO) { + + Log.d(TAG, "renderer index: " + rendererIndex); + + for (int groupIndex = 0; groupIndex < trackGroups.length; groupIndex++) { + TrackGroup trackGroup = trackGroups.get(groupIndex); + + + Log.d(TAG, "track group: " + groupIndex); + for (int trackIndex = 0; trackIndex < trackGroup.length; trackIndex++) { + Format format = trackGroup.getFormat(trackIndex); + int support = mappedTrackInfo.getTrackFormatSupport(rendererIndex, groupIndex, trackIndex); + + if (support == RendererCapabilities.FORMAT_HANDLED) { + Log.d(TAG, Format.toLogString(format)); + } + } + } + } + } + } + + private void switchToFixedTrack(DefaultTrackSelector trackSelector, int rendererIndex, int groupIndex, int trackIndex) { + MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo(); + TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(rendererIndex); + + MappingTrackSelector.SelectionOverride override = new MappingTrackSelector.SelectionOverride(new FixedTrackSelection.Factory(), groupIndex, trackIndex); + trackSelector.setSelectionOverride(rendererIndex, trackGroups, override); + } +} diff --git a/app/src/main/java/de/christinecoenen/code/zapp/utils/VideoErrorHandler.java b/app/src/main/java/de/christinecoenen/code/zapp/utils/video/VideoErrorHandler.java similarity index 98% rename from app/src/main/java/de/christinecoenen/code/zapp/utils/VideoErrorHandler.java rename to app/src/main/java/de/christinecoenen/code/zapp/utils/video/VideoErrorHandler.java index 17606ac4..06743831 100644 --- a/app/src/main/java/de/christinecoenen/code/zapp/utils/VideoErrorHandler.java +++ b/app/src/main/java/de/christinecoenen/code/zapp/utils/video/VideoErrorHandler.java @@ -1,4 +1,4 @@ -package de.christinecoenen.code.zapp.utils; +package de.christinecoenen.code.zapp.utils.video; import android.util.Log;