NoPlayer create(DrmType drmType, DrmHandler drmHandler, boolean downgradeSecureDecoder) { for (PlayerType player : prioritizedPlayerTypes) { if (player.supports(drmType)) { return createPlayerForType(player, drmType, drmHandler, downgradeSecureDecoder); } } throw UnableToCreatePlayerException.unhandledDrmType(drmType); }
void onVideoSizeChanged(int width, int height, float pixelWidthHeightRatio) { float aspectRatio = determineAspectRatio(width, height, pixelWidthHeightRatio); listener.onNewAspectRatio(aspectRatio); }
@Override public boolean onError(MediaPlayer mp, int what, int extra) { bufferStateListener.onBufferCompleted(); NoPlayer.PlayerError error = ErrorFactory.createErrorFrom(what, extra); errorListener.onError(error); return true; } }
@Override public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { if (playbackState == Player.STATE_BUFFERING) { bufferStateListener.onBufferStarted(); } else if (playbackState == Player.STATE_READY) { bufferStateListener.onBufferCompleted(); } }
@Override public void onBeat(NoPlayer player) { long positionInMillis = player.playheadPositionInMillis(); long durationInMillis = player.mediaDurationInMillis(); int bufferPercentage = player.bufferPercentage(); updateProgress(positionInMillis, durationInMillis, bufferPercentage); updateTiming(positionInMillis, durationInMillis); } };
private boolean mediaPlayerIsUnavailable(NoPlayer player) { try { return !player.isPlaying(); } catch (IllegalStateException e) { // The mediaplayer has not been initialized or has been released return true; } }
public void onCompletion() { if (!hasCompleted) { hasCompleted = true; for (NoPlayer.CompletionListener listener : listeners) { listener.onCompletion(); } } }
@Override public void onBufferStarted() { for (NoPlayer.BufferStateListener listener : listeners) { listener.onBufferStarted(); } }
static UnableToCreatePlayerException unhandledPlayerType(PlayerType playerType) { return new UnableToCreatePlayerException("Unhandled player type: " + playerType.name()); }
@Override public void onError(NoPlayer.PlayerError error) { for (NoPlayer.ErrorListener listener : listeners) { listener.onError(error); } } }
private void notifyListeners(Either<Surface, SurfaceHolder> either) { for (Callback callback : callbacks) { callback.onSurfaceReady(either); } }
/** * Sets {@link PlayerBuilder} to build a {@link NoPlayer} which supports Widevine classic DRM. * * @return {@link PlayerBuilder} * @see NoPlayer */ public PlayerBuilder withWidevineClassicDrm() { return withDrm(DrmType.WIDEVINE_CLASSIC, DrmHandler.NO_DRM); }
@Override public void onDroppedVideoFrames(int droppedFrames, long elapsedMsSinceLastDroppedFrames) { for (NoPlayer.DroppedVideoFramesListener listener : listeners) { listener.onDroppedVideoFrames(droppedFrames, elapsedMsSinceLastDroppedFrames); } } }
/** * Builds a new {@link Options} instance. * * @return a {@link Options} instance. */ public Options build() { return new Options(contentType, minDurationBeforeQualityIncreaseInMillis, maxInitialBitrate); } }
@Override public void onNewInfo(String callingMethod, Map<String, String> callingMethodParams) { for (NoPlayer.InfoListener listener : listeners) { listener.onNewInfo(callingMethod, callingMethodParams); } } }
@Override public int hashCode() { int result = contentType != null ? contentType.hashCode() : 0; result = 31 * result + minDurationBeforeQualityIncreaseInMillis; result = 31 * result + maxInitialBitrate; return result; }
@Override public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { if (playbackState == Player.STATE_ENDED) { completionListener.onCompletion(); } }
/** * Sets {@link PlayerBuilder} to build a {@link NoPlayer} which supports Widevine modular download DRM. * * @param downloadedModularDrm Implementation of {@link DownloadedModularDrm}. * @return {@link PlayerBuilder} * @see NoPlayer */ public PlayerBuilder withWidevineModularDownloadDrm(DownloadedModularDrm downloadedModularDrm) { return withDrm(DrmType.WIDEVINE_MODULAR_DOWNLOAD, downloadedModularDrm); }