@Override public void setPlaybackParams(PlaybackParameters playbackParams) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (mMediaPlayer == null || !mPrepared) { mPlaybackParams = new PlaybackParams().setSpeed(playbackParams.speed).setPitch(playbackParams.pitch); } else { mMediaPlayer.setPlaybackParams(new PlaybackParams().setSpeed(playbackParams.speed).setPitch(playbackParams.pitch)); if (mState != PlaybackStateCompat.STATE_PLAYING && mMediaPlayer.isPlaying()) { mState = PlaybackStateCompat.STATE_PLAYING; } if (mCallback != null) { mCallback.onPlaybackStatusChanged(mState); } } } }
private void stopSmoothTrickplay(boolean calledBySeek) { if (mTrickplayRunning) { mTrickplayRunning = false; if (mAudioRenderer instanceof Ac3PassthroughTrackRenderer) { mPlayer.sendMessage(mAudioRenderer, Ac3PassthroughTrackRenderer.MSG_SET_PLAYBACK_SPEED, 1.0f); } else { mPlayer.sendMessage(mAudioRenderer, MediaCodecAudioTrackRenderer.MSG_SET_PLAYBACK_PARAMS, new PlaybackParams().setSpeed(1.0f)); } if (!calledBySeek) { mPlayer.seekTo(mPlayer.getCurrentPosition()); } } }
/** * Sets the {@link PlaybackParams} governing audio playback. * * @param params The {@link PlaybackParams}, or null to clear any previously set parameters. */ @TargetApi(23) public void setPlaybackParams(PlaybackParams params) { if (params != null) { // The audio renderers will call this on the playback thread to ensure they can query // parameters without failure. We do the same up front, which is redundant except that it // ensures an immediate call to getPlaybackParams will retrieve the instance with defaults // allowed, rather than this change becoming visible sometime later once the audio renderers // receive the parameters. params.allowDefaults(); playbackParamsHolder = new PlaybackParamsHolder(params); } else { playbackParamsHolder = null; } ExoPlayerMessage[] messages = new ExoPlayerMessage[audioRendererCount]; int count = 0; for (Renderer renderer : renderers) { if (renderer.getTrackType() == C.TRACK_TYPE_AUDIO) { messages[count++] = new ExoPlayerMessage(renderer, C.MSG_SET_PLAYBACK_PARAMS, params); } } player.sendMessages(messages); }
@Override public void handleMessage(int messageType, Object message) throws ExoPlaybackException { switch (messageType) { case C.MSG_SET_VOLUME: audioTrack.setVolume((Float) message); break; case C.MSG_SET_PLAYBACK_PARAMS: audioTrack.setPlaybackParams((PlaybackParams) message); break; case C.MSG_SET_STREAM_TYPE: @C.StreamType int streamType = (Integer) message; audioTrack.setStreamType(streamType); break; default: super.handleMessage(messageType, message); break; } }
public void setPlaybackParams(PlaybackParams playbackParams) { if (Math.abs(playbackParams.getSpeed() - 1f) < 0.1) { // Handle normal playback, stopping the background thread if (DEBUG) { Log.d(TAG, "Returning to normal speed, so we will stop running thread"); } stop(); return; } if (DEBUG) { Log.d(TAG, "Start trickplay thread with a speed of " + playbackParams.getSpeed()); } mSpeed = playbackParams.getSpeed(); if (mFakeTrickplayHandler == null) { mFakeTrickplayHandler = new Handler(Looper.getMainLooper()); } if (!mActive) { mFakeTrickplayHandler.post(this); mActive = true; } }
@RequiresApi(api = Build.VERSION_CODES.M) @Override public void onTimeShiftSetPlaybackParams(PlaybackParams params) { if (params.getSpeed() != 1.0f) { mHandler.removeMessages(MSG_PLAY_AD); mDbHandler.removeCallbacks(mGetCurrentProgramRunnable); } if (DEBUG) { Log.d(TAG, "Set playback speed to " + params.getSpeed()); } if (getTvPlayer() != null) { getTvPlayer().setPlaybackParams(params); } }
@Override public void handleMessage(int messageType, Object message) throws ExoPlaybackException { switch (messageType) { case MSG_SET_VOLUME: audioTrack.setVolume((Float) message); break; case MSG_SET_PLAYBACK_PARAMS: audioTrack.setPlaybackParams((PlaybackParams) message); break; default: super.handleMessage(messageType, message); break; } }
@Override public void setPlaybackParameters(PlaybackParams playbackParams) { playbackParams = (playbackParams != null ? playbackParams : new PlaybackParams()) .allowDefaults(); this.playbackParams = playbackParams; this.playbackSpeed = playbackParams.getSpeed(); maybeApplyPlaybackParams(); }
/** * Sets the {@link PlaybackParams} governing audio playback. * * @deprecated Use {@link #setPlaybackParameters(PlaybackParameters)}. * @param params The {@link PlaybackParams}, or null to clear any previously set parameters. */ @Deprecated @TargetApi(23) public void setPlaybackParams(@Nullable PlaybackParams params) { PlaybackParameters playbackParameters; if (params != null) { params.allowDefaults(); playbackParameters = new PlaybackParameters(params.getSpeed(), params.getPitch()); } else { playbackParameters = null; } setPlaybackParameters(playbackParameters); }
/** * Rewinds the media with the given speed, if the current input supports time-shifting. * * @param speed The speed to rewind the media. e.g. 2 for 2x, 3 for 3x and 4 for 4x. */ public void timeshiftRewind(int speed) { if (!isTimeShiftAvailable()) { throw new IllegalStateException("Time-shift is not supported for the current channel"); } else { if (speed <= 0) { throw new IllegalArgumentException("The speed should be a positive integer."); } mTimeShiftState = TIME_SHIFT_STATE_REWIND; PlaybackParams params = new PlaybackParams(); params.setSpeed(speed * -1); mTvView.timeShiftSetPlaybackParams(params); } }
/** * Fast-forwards the media with the given speed, if the current input supports time-shifting. * * @param speed The speed to forward the media. e.g. 2 for 2x, 3 for 3x and 4 for 4x. */ public void timeshiftFastForward(int speed) { if (!isTimeShiftAvailable()) { throw new IllegalStateException("Time-shift is not supported for the current channel"); } else { if (speed <= 0) { throw new IllegalArgumentException("The speed should be a positive integer."); } mTimeShiftState = TIME_SHIFT_STATE_FAST_FORWARD; PlaybackParams params = new PlaybackParams(); params.setSpeed(speed); mTvView.timeShiftSetPlaybackParams(params); } }
private void doTimeShiftSetPlaybackParams(PlaybackParams params) { if (!hasEnoughBackwardBuffer() && params.getSpeed() < 1.0f) { return; } mPlaybackParams = params; float speed = mPlaybackParams.getSpeed(); if (speed == 1.0f) { mHandler.removeMessages(MSG_SMOOTH_TRICKPLAY_MONITOR); mHandler.removeMessages(MSG_TRICKPLAY_BY_SEEK); doTimeShiftResume(); } else if (mPlayer.supportSmoothTrickPlay(speed)) { mHandler.removeMessages(MSG_TRICKPLAY_BY_SEEK); mPlayer.setAudioTrack(false); mPlayer.startSmoothTrickplay(mPlaybackParams); mHandler.sendEmptyMessageDelayed(MSG_SMOOTH_TRICKPLAY_MONITOR, TRICKPLAY_MONITOR_INTERVAL_MS); } else { mHandler.removeMessages(MSG_SMOOTH_TRICKPLAY_MONITOR); if (!mHandler.hasMessages(MSG_TRICKPLAY_BY_SEEK)) { mPlayer.setAudioTrack(false); mPlayer.setPlayWhenReady(false); // Initiate trickplay mHandler.sendMessage(mHandler.obtainMessage(MSG_TRICKPLAY_BY_SEEK, (int) (mPlayer.getCurrentPosition() + speed * getTrickPlaySeekIntervalMs()), 0)); } } }
/** * Starts trickplay. It'll be reset, if {@link #seekTo} or {@link #setPlayWhenReady} is called. */ public void startSmoothTrickplay(PlaybackParams playbackParams) { SoftPreconditions.checkState(supportSmoothTrickPlay(playbackParams.getSpeed())); mPlayer.setPlayWhenReady(true); mTrickplayRunning = true; if (mAudioRenderer instanceof Ac3PassthroughTrackRenderer) { mPlayer.sendMessage(mAudioRenderer, Ac3PassthroughTrackRenderer.MSG_SET_PLAYBACK_SPEED, playbackParams.getSpeed()); } else { mPlayer.sendMessage(mAudioRenderer, MediaCodecAudioTrackRenderer.MSG_SET_PLAYBACK_PARAMS, playbackParams); } }
public void setPlaybackSpeed(float speed) { this.speed = speed; if (Build.VERSION.SDK_INT >= 23) { PlaybackParams params = new PlaybackParams(); params.setSpeed(speed); setPlaybackParams(params); } else if (sonicMediaCodecAudioRenderer != null) { sonicMediaCodecAudioRenderer.setSonicSpeed(speed); } }
public void setPlaybackPitch(float pitch) { this.pitch = pitch; if (Build.VERSION.SDK_INT >= 23) { PlaybackParams params = new PlaybackParams(); params.setPitch(pitch); setPlaybackParams(params); } else if (sonicMediaCodecAudioRenderer != null) { sonicMediaCodecAudioRenderer.setSonicPitch(pitch); } }
@Override public void setPlaybackParams(PlaybackParams playbackParams) { playbackParams = (playbackParams != null ? playbackParams : new PlaybackParams()) .allowDefaults(); this.playbackParams = playbackParams; playbackSpeed = playbackParams.getSpeed(); maybeApplyPlaybackParams(); }
@Override public void startPlaying() { if (isPlaying()) { audioTrack.stop(); } PlaybackParams playbackParams = audioTrack.getPlaybackParams(); playbackParams.setPitch(speed); audioTrack.setPlaybackParams(playbackParams); audioTrack.setPlaybackPositionUpdateListener(positionListener); audioTrack.play(); AudioPlayerTask playerTask = new AudioPlayerTask(audioTrack, file); playerThread = new Thread(playerTask); playerThread.start(); }
@Override public void handleMessage(int messageType, Object message) throws ExoPlaybackException { switch (messageType) { case C.MSG_SET_VOLUME: audioTrack.setVolume((Float) message); break; case C.MSG_SET_PLAYBACK_PARAMS: audioTrack.setPlaybackParams((PlaybackParams) message); break; default: super.handleMessage(messageType, message); break; } }
@Override public void setPlaybackParams(PlaybackParams playbackParams) { playbackParams = (playbackParams != null ? playbackParams : new PlaybackParams()) .allowDefaults(); this.playbackParams = playbackParams; this.playbackSpeed = playbackParams.getSpeed(); maybeApplyPlaybackParams(); }
@Override public void onTimeShiftSetPlaybackParams(PlaybackParams params) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (tvInputProvider instanceof TimeShiftable) { ((TimeShiftable) tvInputProvider).onMediaSetPlaybackParams(params); } } }
@Override public boolean setPlaybackSpeed(float speed) { // Marshmallow+ support setting the playback speed natively if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { PlaybackParams params = new PlaybackParams(); params.setSpeed(speed); mediaPlayer.setPlaybackParams(params); return true; } return false; }
public boolean setPlaybackSpeed(float speed) { // Marshmallow+ support setting the playback speed natively if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { PlaybackParams params = new PlaybackParams(); params.setSpeed(speed); mediaPlayer.setPlaybackParams(params); return true; } return false; }
@RequiresApi(api = Build.VERSION_CODES.M) @Override public void setPlaybackParams(PlaybackParams params) { mSimpleExoPlayer.setPlaybackParams(params); mPlaybackSpeed = params.getSpeed(); if (DEBUG) { Log.d(TAG, "Set params " + params.toString()); } }
private synchronized void applyPlaybackParams(MediaPlayer mediaPlayer) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { float playbackSpeed = getPlaybackSpeed(); try { if (Math.abs(playbackSpeed - 1.0) > 0.01 || mediaPlayer.getPlaybackParams() != null) { PlaybackParams playbackParams = new PlaybackParams(); playbackParams.setSpeed(playbackSpeed); mediaPlayer.setPlaybackParams(playbackParams); } } catch(Exception e) { Log.e(TAG, "Error while applying media player params", e); } } }
@Override public void setPitchStepsAdjustment(float pitchSteps) { if (Build.VERSION.SDK_INT < 23) { return; } PlaybackParams params = mp.getPlaybackParams(); params.setPitch(params.getPitch() + pitchSteps); mp.setPlaybackParams(params); }
@Override public void setPlaybackPitch(float f) { Log.d(AMP_TAG, "setPlaybackPitch(" + f + ")"); if (Build.VERSION.SDK_INT < 23) { return; } PlaybackParams params = mp.getPlaybackParams(); params.setPitch(f); mp.setPlaybackParams(params); }
@Override public void setPlaybackSpeed(float f) { Log.d(AMP_TAG, "setPlaybackSpeed(" + f + ")"); if (Build.VERSION.SDK_INT < 23) { return; } PlaybackParams params = mp.getPlaybackParams(); params.setSpeed(f); boolean isPaused = this.owningMediaPlayer.state == org.antennapod.audio.MediaPlayer.State.PAUSED; mp.setPlaybackParams(params); if (isPaused) { mp.pause(); } }
@ReactMethod public void set(Integer playerId, ReadableMap options, Callback callback) { MediaPlayer player = this.playerPool.get(playerId); if (player == null) { callback.invoke(errObj("notfound", "playerId " + playerId + " not found.")); return; } if (options.hasKey("wakeLock")) { // TODO: can we disable the wake lock also? if (options.getBoolean("wakeLock")) { player.setWakeMode(this.context, PowerManager.PARTIAL_WAKE_LOCK); } } if (options.hasKey("autoDestroy")) { this.playerAutoDestroy.put(playerId, options.getBoolean("autoDestroy")); } if (options.hasKey("continuesToPlayInBackground")) { this.playerContinueInBackground.put(playerId, options.getBoolean("continuesToPlayInBackground")); } if (options.hasKey("volume") && !options.isNull("volume")) { double vol = options.getDouble("volume"); player.setVolume((float) vol, (float) vol); } if (options.hasKey("looping") && !options.isNull("looping")) { this.looping = options.getBoolean("looping"); } if (options.hasKey("speed") || options.hasKey("pitch")) { PlaybackParams params = new PlaybackParams(); if (options.hasKey("speed") && !options.isNull("speed")) { params.setSpeed((float) options.getDouble("speed")); } if (options.hasKey("pitch") && !options.isNull("pitch")) { params.setPitch((float) options.getDouble("pitch")); } player.setPlaybackParams(params); } callback.invoke(); }
@Override public void onTimeShiftSetPlaybackParams(PlaybackParams params) { mSessionWorker.sendMessage( TunerSessionWorker.MSG_TIMESHIFT_SET_PLAYBACKPARAMS, params); }
@Override public void onTimeShiftSetPlaybackParams(PlaybackParams params) { mSpeed = params.getSpeed(); }
/** * Returns the {@link PlaybackParams} governing audio playback, or null if not set. */ @TargetApi(23) public PlaybackParams getPlaybackParams() { return playbackParamsHolder == null ? null : playbackParamsHolder.params; }