/** * Builds a new {@link Options} instance. * * @return a {@link Options} instance. */ public Options build() { return new Options(contentType, minDurationBeforeQualityIncreaseInMillis, maxInitialBitrate); } }
List<PlayerVideoTrack> getVideoTracks() { assertVideoLoaded(); return compositeTrackSelector.getVideoTracks(rendererTypeRequester, options.contentType()); }
CompositeTrackSelector create(Options options, DefaultBandwidthMeter bandwidthMeter) { TrackSelection.Factory adaptiveTrackSelectionFactory = new AdaptiveTrackSelection.Factory( bandwidthMeter, options.minDurationBeforeQualityIncreaseInMillis(), AdaptiveTrackSelection.DEFAULT_MAX_DURATION_FOR_QUALITY_DECREASE_MS, AdaptiveTrackSelection.DEFAULT_MIN_DURATION_TO_RETAIN_AFTER_DISCARD_MS, AdaptiveTrackSelection.DEFAULT_BANDWIDTH_FRACTION, AdaptiveTrackSelection.DEFAULT_BUFFERED_FRACTION_TO_LIVE_EDGE_FOR_QUALITY_INCREASE, AdaptiveTrackSelection.DEFAULT_MIN_TIME_BETWEEN_BUFFER_REEVALUTATION_MS, Clock.DEFAULT ); DefaultTrackSelector trackSelector = new DefaultTrackSelector(adaptiveTrackSelectionFactory); ExoPlayerTrackSelector exoPlayerTrackSelector = ExoPlayerTrackSelector.newInstance(trackSelector); ExoPlayerAudioTrackSelector audioTrackSelector = new ExoPlayerAudioTrackSelector(exoPlayerTrackSelector); ExoPlayerVideoTrackSelector videoTrackSelector = new ExoPlayerVideoTrackSelector(exoPlayerTrackSelector); ExoPlayerSubtitleTrackSelector subtitleTrackSelector = new ExoPlayerSubtitleTrackSelector(exoPlayerTrackSelector); return new CompositeTrackSelector(trackSelector, audioTrackSelector, videoTrackSelector, subtitleTrackSelector); }
void loadVideo(PlayerSurfaceHolder playerSurfaceHolder, DrmSessionCreator drmSessionCreator, Uri uri, Options options, ExoPlayerForwarder forwarder, MediaCodecSelector mediaCodecSelector) { this.options = options; DefaultBandwidthMeter bandwidthMeter = bandwidthMeterCreator.create(options.maxInitialBitrate()); compositeTrackSelector = trackSelectorCreator.create(options, bandwidthMeter); exoPlayer = exoPlayerCreator.create( drmSessionCreator, forwarder.drmSessionEventListener(), mediaCodecSelector, compositeTrackSelector.trackSelector() ); rendererTypeRequester = rendererTypeRequesterCreator.createfrom(exoPlayer); exoPlayer.addListener(forwarder.exoPlayerEventListener()); exoPlayer.addAnalyticsListener(forwarder.analyticsListener()); exoPlayer.addVideoListener(forwarder.videoListener()); setMovieAudioAttributes(exoPlayer); MediaSource mediaSource = mediaSourceFactory.create( options, uri, forwarder.mediaSourceEventListener(), bandwidthMeter ); attachToSurface(playerSurfaceHolder); exoPlayer.prepare(mediaSource, RESET_POSITION, DO_NOT_RESET_STATE); }
Optional<PlayerVideoTrack> getSelectedVideoTrack() { assertVideoLoaded(); return compositeTrackSelector.getSelectedVideoTrack(exoPlayer, rendererTypeRequester, options.contentType()); }
public MediaSource create(Options options, Uri uri, MediaSourceEventListener mediaSourceEventListener, DefaultBandwidthMeter bandwidthMeter) { DefaultDataSourceFactory defaultDataSourceFactory = createDataSourceFactory(bandwidthMeter); switch (options.contentType()) { case HLS: return createHlsMediaSource(defaultDataSourceFactory, uri, mediaSourceEventListener); case H264: return createH264MediaSource(defaultDataSourceFactory, uri, mediaSourceEventListener); case DASH: return createDashMediaSource(defaultDataSourceFactory, uri, mediaSourceEventListener); default: throw new UnsupportedOperationException("Content type: " + options + " is not supported."); } }