@Override public void onBeat(NoPlayer player) { if (mediaPlayerIsUnavailable(player)) { stopBuffering(); return; } long currentPositionInMillis = player.playheadPositionInMillis(); if (positionNotUpdating(currentPositionInMillis)) { beatsPlayed = 0; startBuffering(); } else { previousPositionInMillis = currentPositionInMillis; beatsPlayed++; if (beatsPlayed > FORCED_BUFFERING_BEATS_THRESHOLD) { stopBuffering(); } } }
@Test public void whenInitialising_thenBindsListenerToBufferHeartbeatCallback() { player.initialise(); verify(checkBufferHeartbeatCallback).bind(bufferListener); }
public AndroidMediaPlayerImpl create(Context context) { LoadTimeout loadTimeout = new LoadTimeout(new SystemClock(), handler); MediaPlayerForwarder forwarder = new MediaPlayerForwarder(); AndroidMediaPlayerFacade facade = AndroidMediaPlayerFacade.newInstance(context, forwarder); PlayerListenersHolder listenersHolder = new PlayerListenersHolder(); CheckBufferHeartbeatCallback bufferHeartbeatCallback = new CheckBufferHeartbeatCallback(); Heart heart = Heart.newInstance(handler); MediaPlayerTypeReader mediaPlayerTypeReader = new MediaPlayerTypeReader(new SystemProperties(), Build.VERSION.SDK_INT); DelayedActionExecutor delayedActionExecutor = new DelayedActionExecutor(handler, new HashMap<DelayedActionExecutor.Action, Runnable>()); BuggyVideoDriverPreventer preventer = new BuggyVideoDriverPreventer(mediaPlayerTypeReader); MediaPlayerInformation mediaPlayerInformation = new MediaPlayerInformation(mediaPlayerTypeReader); return new AndroidMediaPlayerImpl( mediaPlayerInformation, facade, forwarder, listenersHolder, bufferHeartbeatCallback, loadTimeout, heart, delayedActionExecutor, preventer ); } }
void initialise() { forwarder.bind(listenersHolder.getPreparedListeners(), this); forwarder.bind(listenersHolder.getBufferStateListeners(), listenersHolder.getErrorListeners()); forwarder.bind(listenersHolder.getCompletionListeners(), listenersHolder.getStateChangedListeners()); forwarder.bind(listenersHolder.getVideoSizeChangedListeners()); forwarder.bind(listenersHolder.getInfoListeners()); bufferHeartbeatCallback.bind(forwarder.onHeartbeatListener()); heart.bind(new Heart.Heartbeat(listenersHolder.getHeartbeatCallbacks(), this)); listenersHolder.addHeartbeatCallback(bufferHeartbeatCallback); listenersHolder.addPreparedListener(new PreparedListener() { @Override public void onPrepared(PlayerState playerState) { loadTimeout.cancel(); mediaPlayer.setOnSeekCompleteListener(seekToResettingSeekListener); } }); listenersHolder.addErrorListener(new ErrorListener() { @Override public void onError(PlayerError error) { reset(); } }); listenersHolder.addVideoSizeChangedListener(new VideoSizeChangedListener() { @Override public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) { videoWidth = width; videoHeight = height; } }); }