【发布时间】:2011-06-04 14:27:49
【问题描述】:
我正在使用 VideoView 播放保存在 res/raw 中的视频文件。我找不到控制视频播放速度的方法。基本上我想在移动滚动条时减少和增加播放。有什么办法可以实现这个吗?
【问题讨论】:
-
嗨,我想像你一样在视频视图功能中实现,我不知道,如果你找到任何解决方案,请发给我,谢谢。
标签: android video android-videoview
我正在使用 VideoView 播放保存在 res/raw 中的视频文件。我找不到控制视频播放速度的方法。基本上我想在移动滚动条时减少和增加播放。有什么办法可以实现这个吗?
【问题讨论】:
标签: android video android-videoview
你可以使用它,但它适用于 api 23 及更高版本
mVideo.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
//works only from api 23
PlaybackParams myPlayBackParams = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
myPlayBackParams = new PlaybackParams();
myPlayBackParams.setSpeed(0.8f); //you can set speed here
mp.setPlaybackParams(myPlayBackParams);
}
}
});
【讨论】:
mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(speed));更有效
不,您不能仅通过使用VideoView 来更改播放速率。 VideoView 和 MediaPlayer 只提供有限的媒体功能。
您必须使用一些第三方库,例如 PVPlayer,并自己实现。
这也是 Android 上优秀的媒体播放器如此有价值的原因:)
【讨论】:
我想说Mk Kamal 的解决方案有一个意想不到的副作用:在应用程序从后台返回时,在OnPreparedListener 中调用setPlaybackParams 将强制VideoView 重复最新播放的视频。
我不知道这是错误还是功能,但我找到了避免这种行为的方法:
private float speed = 0.8f;
private final MediaPlayer.OnInfoListener listener = (mp, what, extra) -> {
if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(speed));
return true;
}
return false;
};
videoView.setOnPreparedListener(
mp -> {
mp.setOnInfoListener(listener);
}
);
MEDIA_INFO_VIDEO_RENDERING_START 将仅在播放器已启动时发送。
我要强调的是getPlaybackParams被注释为@NonNull,所以没有必要创建新的PlaybackParams对象。
【讨论】:
DicePlayer 在我的 Asus Transformer 上完美运行。 它有一个速度控制屏幕显示。
我不确定res/raw 是什么。
【讨论】: