8

我正在使用 VideoView 播放保存在 res/raw 中的视频文件。我找不到控制视频播放速度的方法。基本上我想在移动滚动条时减少和增加播放。是否有任何解决方法来实现这一点?

4

4 回答 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

不,您不能通过简单地使用来更改播放速率VideoViewVideoView并且MediaPlayer只提供有限的媒体功能。

您必须使用一些第三方库,例如 PVPlayer,并自己实现它。

这也是 Android 上优秀的媒体播放器如此有价值的原因:)

于 2011-04-13T04:50:38.547 回答
0

我想说的是Mk Kamal的解决方案有一个意想不到的副作用:当应用程序从后台返回时,调用将强制重复最新播放的setPlaybackParams视频OnPreparedListenerVideoView我不知道这是一个错误还是一个功能,但我找到了一种避免这种行为的方法:

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 回答