@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); } };
@Override public void onClick(DialogInterface dialog, int position) { if (position == AUTO_TRACK_POSITION) { noPlayer.clearAudioTrackSelection(); } else { PlayerAudioTrack audioTrack = audioTracks.get(position - 1); noPlayer.selectAudioTrack(audioTrack); } } })
@Override public void onClick(DialogInterface dialog, int position) { if (position == AUTO_TRACK_POSITION) { noPlayer.clearVideoTrackSelection(); } else { PlayerVideoTrack videoTrack = videoTracks.get(position - 1); noPlayer.selectVideoTrack(videoTrack); } } })
private boolean mediaPlayerIsUnavailable(NoPlayer player) { try { return !player.isPlaying(); } catch (IllegalStateException e) { // The mediaplayer has not been initialized or has been released return true; } }
@Override public void onPrepared(PlayerState playerState) { noPlayer.play(); } };
void startPresenting(Uri uri, Options options) { listeners.addPreparedListener(playOnPrepared); listeners.addStateChangedListener(updatePlayPause); listeners.addHeartbeatCallback(updateProgress); controllerView.setTogglePlayPauseAction(onTogglePlayPause); controllerView.setSeekAction(onSeekPerformed); controllerView.setToggleVolumeOnOffAction(onToggleVolume); noPlayer.attach(playerView); noPlayer.loadVideo(uri, options); }
@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(); } } }
void showAudioSelectionDialog() { final AudioTracks audioTracks = noPlayer.getAudioTracks(); ArrayAdapter<String> adapter = new ArrayAdapter<>(context, R.layout.list_item); adapter.addAll(mapAudioTrackToLabel(audioTracks)); new AlertDialog.Builder(context) .setTitle("Select audio track") .setAdapter(adapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int position) { if (position == AUTO_TRACK_POSITION) { noPlayer.clearAudioTrackSelection(); } else { PlayerAudioTrack audioTrack = audioTracks.get(position - 1); noPlayer.selectAudioTrack(audioTrack); } } }) .create() .show(); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); NoPlayerLog.setLoggingEnabled(true); setContentView(R.layout.activity_main); PlayerView playerView = findViewById(R.id.player_view); View videoSelectionButton = findViewById(R.id.button_video_selection); View audioSelectionButton = findViewById(R.id.button_audio_selection); View subtitleSelectionButton = findViewById(R.id.button_subtitle_selection); ControllerView controllerView = findViewById(R.id.controller_view); videoSelectionButton.setOnClickListener(showVideoSelectionDialog); audioSelectionButton.setOnClickListener(showAudioSelectionDialog); subtitleSelectionButton.setOnClickListener(showSubtitleSelectionDialog); DataPostingModularDrm drmHandler = new DataPostingModularDrm(EXAMPLE_MODULAR_LICENSE_SERVER_PROXY); player = new PlayerBuilder() .withWidevineModularStreamingDrm(drmHandler) .withDowngradedSecureDecoder() .build(this); demoPresenter = new DemoPresenter(controllerView, player, player.getListeners(), playerView); dialogCreator = new DialogCreator(this, player); player.getListeners().addDroppedVideoFrames(new NoPlayer.DroppedVideoFramesListener() { @Override public void onDroppedVideoFrames(int droppedFrames, long elapsedMsSinceLastDroppedFrames) { Log.v(getClass().toString(), "dropped frames: " + droppedFrames + " since: " + elapsedMsSinceLastDroppedFrames + "ms"); } }); }
private boolean statusMightBeCorrupted() { return player.isPlaying(); }
private void forceAlignNativeMediaPlayerStatus() { player.play(); }
@Override public void run() { if (player.isPlaying()) { callback.onBeat(player); } } }
@Test public void emitsOnBeat_whenPlayerIsPlaying() { given(noPlayer.isPlaying()).willReturn(true); Heart.Heartbeat onHeartbeat = new Heart.Heartbeat(heartbeatCallback, noPlayer); heart.bind(onHeartbeat); heart.startBeatingHeart(); then(heartbeatCallback).should().onBeat(noPlayer); }
@Test public void emitsOnBeat_whenForcingBeat() { given(noPlayer.isPlaying()).willReturn(true); Heart.Heartbeat onHeartbeat = new Heart.Heartbeat(heartbeatCallback, noPlayer); heart.bind(onHeartbeat); heart.forceBeat(); then(heartbeatCallback).should().onBeat(noPlayer); } }