如何在 Unity 中倒回视频播放器?

How to Rewind Video Player in Unity?

我正在尝试在 Unity 中倒回一个 VideoPlayer,我也在使用新的 VideoPlayer API 和一个 mp4。我尝试将播放速度设置为负数,但它会暂停。 我目前的解决方案是

在我的倒带按钮脚本中:

void Update ()
{

    if (rewind == true) {
        VideoController.Backward2Seconds();

    }

}

在我的 VideoController 脚本中

public void Backward2Seconds() {
    if (!IsPlaying) return;
        videoPlayer.time = videoPlayer.time - 2;
}

有没有更好的方法?因为这很卡。

很遗憾,恐怕您的第一次尝试是最好的,只是您的平台不支持它。它可以在其他设备上工作。根据 VideoPlayer doc:

Support for negative values is platform dependent

由于此解决方案似乎不适用于您的设备,考虑到每帧之间经过的时间,您的解决方法可能会得到改进。尝试以下操作:

在你的 RewindButton 脚本中

void Update ()
{
    if (rewind == true) {
        VideoController.Backward(Time.deltaTime);
    } 
}

在您的 VideoController 脚本中

public float Speed;

public void Backward(float deltaTime) 
{
    if (!IsPlaying) return;
        videoPlayer.time = videoPlayer.time - deltaTime*Speed;
}

这应该允许您控制倒带的速度,同时获得更流畅的效果

由于“回放”一词经常引起混淆,我想会有一些人会来这里研究如何从头开始重放视频。

这是我的做法。我多次使用此代码(在 Android 和 iOS 上测试)。您可以调用 PlayCurrentVideoClip 重播当前视频片段。

    public void PlayCurrentVideoClip()
    {
        Assert.IsNotNull(videoPlayer.clip);
        PlayVideoClip(videoPlayer.clip);
    }

    public void PlayVideoClip(VideoClip _vc) {
        StartCoroutine(PlayVideoClipCoroutine(_vc));
    }

    IEnumerator PlayVideoClipCoroutine(VideoClip _vc) {
        videoPlayerUI?.SetActive(true);
        yield return new WaitForEndOfFrame(); // safely wait 1 frame for the UI to be active
        SetVideoClip(_vc);
        videoPlayer.enabled = true;
        videoPlayer.frame = 0;
        videoPlayer.Play();
        videoPlayer.EnableAudioTrack(0, true);
        OnPlay.Invoke();
    }

在我的示例中,最终代码在协程中,因为我必须先启用一些 UI。如果你不必这样做,你应该可以使用普通方法(非协程)。

唯一的缺点是您可能会看到视频面板瞬间消失的小故障。可以很烦,但不是世界末日。