下面列出了怎么用android.media.PlaybackParams的API类实例代码及写法,或者点击链接到github查看源代码。
@Override
public void timeShiftSetPlaybackParams(IBinder sessionToken, PlaybackParams params,
int userId) {
final int callingUid = Binder.getCallingUid();
final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(), callingUid,
userId, "timeShiftSetPlaybackParams");
final long identity = Binder.clearCallingIdentity();
try {
synchronized (mLock) {
try {
getSessionLocked(sessionToken, callingUid, resolvedUserId)
.timeShiftSetPlaybackParams(params);
} catch (RemoteException | SessionNotFoundException e) {
Slog.e(TAG, "error in timeShiftSetPlaybackParams", e);
}
}
} finally {
Binder.restoreCallingIdentity(identity);
}
}
private void setSpeed(float speed) {
if (release) {
return;
}
if (mediaPlayer != null && mediaPlayer.getInternalMediaPlayer() != null && mediaPlayer.isPlayable()) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PlaybackParams playbackParams = new PlaybackParams();
playbackParams.setSpeed(speed);
mediaPlayer.getInternalMediaPlayer().setPlaybackParams(playbackParams);
} else {
Debuger.printfError(" not support setSpeed");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 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;
}
}
@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;
}
}
/**
* 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);
}
@Override
public void setSpeed(float speed) {
if (Build.VERSION.SDK_INT > 23) {
PlaybackParams params = new PlaybackParams();
params.setSpeed(speed);
mPlayer.setPlaybackParams(params);
} else {
LogUtils.w("setSpeed is invalid.");
}
}
/**
* 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);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void setSpeed(float speed) {
PlaybackParams pp = mediaPlayer.getPlaybackParams();
pp.setSpeed(speed);
mediaPlayer.setPlaybackParams(pp);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void setSpeed(float speed) {
PlaybackParams pp = mediaPlayer.getPlaybackParams();
pp.setSpeed(speed);
mediaPlayer.setPlaybackParams(pp);
}
/**
* 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);
}
@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);
}
}
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 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();
}
}
@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);
}
}
/**
* 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);
}
/**
* 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);
}
@TargetApi(Build.VERSION_CODES.M)
public void changePlaybackSpeed(float speed) {
PlaybackParams playbackParams = new PlaybackParams();
playbackParams.setSpeed(speed);
setPlaybackParams(playbackParams);
}
@Override
public void onTimeShiftResume() {
if (DEBUG) Log.d(TAG, "Resume playback of program");
mTimeShiftIsPaused = false;
if (mCurrentProgram == null) {
return;
}
if (!mPlayingRecordedProgram) {
// If currently playing program content, past ad durations must be recalculated
// based on getTvPlayer.getCurrentPosition().
mElapsedAdsTime = 0;
mElapsedProgramTime = getTvPlayer().getCurrentPosition();
long elapsedProgramTimeAdjusted =
mElapsedProgramTime + mCurrentProgram.getStartTimeUtcMillis();
if (mCurrentProgram.getInternalProviderData() != null) {
List<Advertisement> ads = mCurrentProgram.getInternalProviderData().getAds();
// First, sort the ads in time order.
TreeMap<Long, Long> scheduledAds = new TreeMap<>();
for (Advertisement ad : ads) {
scheduledAds.put(ad.getStartTimeUtcMillis(), ad.getStopTimeUtcMillis());
}
// Second, add up all ad times which should have played before the elapsed
// program time.
long programDurationPlayed = 0;
long totalDurationPlayed = 0;
for (Long adStartTime : scheduledAds.keySet()) {
programDurationPlayed += adStartTime - totalDurationPlayed;
if (programDurationPlayed < elapsedProgramTimeAdjusted) {
long adDuration = scheduledAds.get(adStartTime) - adStartTime;
mElapsedAdsTime += adDuration;
totalDurationPlayed = programDurationPlayed + adDuration;
} else {
break;
}
}
} else {
Log.w(
TAG,
"Failed to get program provider data for "
+ mCurrentProgram.getTitle()
+ ". Try to do an EPG sync.");
}
mTimeShiftedPlaybackPosition = elapsedProgramTimeAdjusted + mElapsedAdsTime;
scheduleNextAd();
scheduleNextProgram();
}
if (getTvPlayer() != null) {
getTvPlayer().play();
}
// Resume and make sure media is playing at regular speed.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PlaybackParams normalParams = new PlaybackParams();
normalParams.setSpeed(1);
onTimeShiftSetPlaybackParams(normalParams);
}
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void setPlaybackParams(PlaybackParams params) {
mMediaPlayer.setPlaybackParams(params);
}
/**
* Returns the {@link PlaybackParams} governing audio playback, or null if not set.
*/
@TargetApi(23)
public PlaybackParams getPlaybackParams() {
return playbackParamsHolder == null ? null : playbackParamsHolder.params;
}