我正在使用 VideoView 播放保存在 res/raw 中的视频文件。我找不到控制视频播放速度的方法。基本上我想在移动滚动条时减少和增加播放。是否有任何解决方法来实现这一点?
问问题
8886 次
4 回答
12
你可以使用它,但它适用于 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);
}
}
});
于 2018-08-15T12:58:48.583 回答
2
不,您不能通过简单地使用来更改播放速率VideoView
。VideoView
并且MediaPlayer
只提供有限的媒体功能。
您必须使用一些第三方库,例如 PVPlayer,并自己实现它。
这也是 Android 上优秀的媒体播放器如此有价值的原因:)
于 2011-04-13T04:50:38.547 回答
0
我想说的是Mk Kamal的解决方案有一个意想不到的副作用:当应用程序从后台返回时,调用将强制重复最新播放的setPlaybackParams
视频OnPreparedListener
。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
对象。
于 2021-09-15T00:12:17.693 回答
-3
DicePlayer 在我的 Asus Transformer 上完美运行。它有一个速度控制屏幕显示。
我不确定是什么res/raw
。
于 2012-06-25T23:10:51.667 回答