下面列出了android.media.PlaybackParams#setSpeed ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
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();
}
}
}
@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.");
}
}
@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);
}
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);
}
}
@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;
}
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 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();
}
}
@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);
}
}
@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);
}
}