/** * Set different seek time depending on the video length * @param player source of the video params */ public void initTimeBar(final SimpleExoPlayer player) { if (player == null) { return; } int incrementMS; final long durationMS = player.getDuration(); if (durationMS < 10*60*1000) { // 0 - 10 min incrementMS = SEEK_INCREMENT_10MIN_MS; } else if (durationMS < 60*60*1000) { // 10 - 60 min incrementMS = SEEK_INCREMENT_60MIN_MS; } else if (durationMS < 120*60*1000) { // 60 - 120 min incrementMS = SEEK_INCREMENT_120MIN_MS; } else if (durationMS < 180*60*1000) { // 120 - 180 min incrementMS = SEEK_INCREMENT_180MIN_MS; } else { // 180 - ... min incrementMS = SEEK_INCREMENT_MORE_180MIN_MS; } // time bar: rewind and fast forward to 15 secs final TimeBar timeBar = mExoPlayerView.findViewById(R.id.exo_progress); timeBar.setKeyTimeIncrement(incrementMS); // Playback control view. mExoPlayerView.setRewindIncrementMs(incrementMS); mExoPlayerView.setFastForwardIncrementMs(incrementMS); }
/** * Nasty hacks to fix the sync problems on the Android 4 * @param player video player * @param trackSelector track selector */ public void applySurfaceFix(SimpleExoPlayer player, DefaultTrackSelector trackSelector) { SurfaceView videoSurfaceView = (SurfaceView) mExoPlayerView.getVideoSurfaceView(); SurfaceManager manager = new SurfaceManager(player, trackSelector); videoSurfaceView.getHolder().addCallback(manager); }
private boolean handleBack(KeyEvent event) { boolean isUp = event.getAction() == KeyEvent.ACTION_UP; boolean isVisible = interfaceVisibilityState == View.VISIBLE; if (isVisible) { if (isUp) { simpleExoPlayerView.hideController(); } return true; } return super.dispatchKeyEvent(event); }
@Override public boolean dispatchKeyEvent(KeyEvent event) { event = translateEscapeToBack(event); if (isVolumeEvent(event)) return false; if (isBackKey(event) || isUpKey(event)) { return handleBack(event); } // Show the controls on any key event. simpleExoPlayerView.showController(); // If the event was not handled then see if the player view can handle it as a media key event. return super.dispatchKeyEvent(event) || simpleExoPlayerView.dispatchMediaKeyEvent(event); }
player.setMetadataOutput(eventLogger); simpleExoPlayerView.setPlayer(player); player.setPlayWhenReady(shouldAutoPlay);
private void initExoPlayer() { BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter); TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory); LoadControl loadControl = new DefaultLoadControl(); SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(new DefaultRenderersFactory(this), trackSelector, loadControl); mExoPlayerView.setPlayer(player); boolean haveResumePosition = mResumeWindow != C.INDEX_UNSET; if (haveResumePosition) { mExoPlayerView.getPlayer().seekTo(mResumeWindow, mResumePosition); } mExoPlayerView.getPlayer().prepare(mVideoSource); mExoPlayerView.getPlayer().setPlayWhenReady(true); }
private void initNextButton() { final View nextButton = mExoPlayerView.findViewById(R.id.exo_next2); nextButton.getViewTreeObserver().addOnGlobalLayoutListener(obtainSetButtonEnabledListener(nextButton)); }
private void closeFullscreenDialog() { ((ViewGroup) mExoPlayerView.getParent()).removeView(mExoPlayerView); ((FrameLayout) findViewById(R.id.main_media_frame)).addView(mExoPlayerView); mExoPlayerFullscreen = false; mFullScreenDialog.dismiss(); mFullScreenIcon.setImageDrawable(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_fullscreen_expand)); }
@Override public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) { super.onPictureInPictureModeChanged(isInPictureInPictureMode); SimpleExoPlayerView simpleExoPlayerView = findViewById(R.id.simpleExoPlayerView); if (isInPictureInPictureMode) { // Hide the controls in picture-in-picture mode. simpleExoPlayerView.hideController(); } else { // Restore the playback UI based on the playback status. simpleExoPlayerView.showController(); } }
public void playVideo(View view) { DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveVideoTrackSelection.Factory(bandwidthMeter); TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory); LoadControl loadControl = new DefaultLoadControl(); SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl); mSimpleExoPlayerView.setPlayer(player); DataSource.Factory dataSourceFactory = new EncryptedFileDataSourceFactory(mCipher, mSecretKeySpec, mIvParameterSpec, bandwidthMeter); ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory(); try { Uri uri = Uri.fromFile(mEncryptedFile); MediaSource videoSource = new ExtractorMediaSource(uri, dataSourceFactory, extractorsFactory, null, null); player.prepare(videoSource); player.setPlayWhenReady(true); } catch (Exception e) { e.printStackTrace(); } }
private void initExoPlayer() { if (loading_progress!=null) { loading_progress.setVisibility(View.GONE); } BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter); TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory); LoadControl loadControl = new DefaultLoadControl(); SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(new DefaultRenderersFactory(this), trackSelector, loadControl); mExoPlayerView.setPlayer(player); boolean haveResumePosition = mResumeWindow != C.INDEX_UNSET; if (haveResumePosition) { mExoPlayerView.getPlayer().seekTo(mResumeWindow, mResumePosition); } player.prepare(mVideoSource); mExoPlayerView.getPlayer().setPlayWhenReady(true); }
private void initFullscreenButton() { PlaybackControlView controlView = mExoPlayerView.findViewById(R.id.exo_controller); mFullScreenIcon = controlView.findViewById(R.id.exo_fullscreen_icon); mFullScreenButton = controlView.findViewById(R.id.exo_fullscreen_button); mFullScreenButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!mExoPlayerFullscreen) openFullscreenDialog(); else closeFullscreenDialog(); } }); }
private void openFullscreenDialog() { ((ViewGroup) mExoPlayerView.getParent()).removeView(mExoPlayerView); mFullScreenDialog.addContentView(mExoPlayerView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); mFullScreenIcon.setImageDrawable(ContextCompat.getDrawable(DetailedImageVideo.this, R.drawable.ic_fullscreen_exit_white_24dp)); mExoPlayerFullscreen = true; mFullScreenDialog.show(); }
@Override protected void onPause() { super.onPause(); if (mExoPlayerView != null && mExoPlayerView.getPlayer() != null) { mResumeWindow = mExoPlayerView.getPlayer().getCurrentWindowIndex(); mResumePosition = Math.max(0, mExoPlayerView.getPlayer().getContentPosition()); mExoPlayerView.getPlayer().release(); } if (mFullScreenDialog != null) mFullScreenDialog.dismiss(); }
exoPlayerView.setPlayer(exoPlayer);
private void initFullscreenButton() { PlaybackControlView controlView = mExoPlayerView.findViewById(R.id.exo_controller); mFullScreenIcon = controlView.findViewById(R.id.exo_fullscreen_icon); mFullScreenButton = controlView.findViewById(R.id.exo_fullscreen_button); mFullScreenButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!mExoPlayerFullscreen) openFullscreenDialog(); else closeFullscreenDialog(); } }); }
private void openFullscreenDialog() { ((ViewGroup) mExoPlayerView.getParent()).removeView(mExoPlayerView); mFullScreenDialog.addContentView(mExoPlayerView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); mFullScreenIcon.setImageDrawable(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_fullscreen_skrink)); mExoPlayerFullscreen = true; mFullScreenDialog.show(); }
/** * Nasty hacks to fix the sync problems on the Android 4 * @param player video player */ public void applySurfaceFix(SimpleExoPlayer player) { SurfaceView videoSurfaceView = (SurfaceView) mExoPlayerView.getVideoSurfaceView(); SurfaceManager2 manager = new SurfaceManager2(mPlayer, player); videoSurfaceView.getHolder().addCallback(manager); } }
mExoPlayerView.getPlayer().setPlayWhenReady(true);