如何倒带统一的视频播放器



我正在尝试以Unity的形式倒带一个视频仪,也正在使用新的Videoplayer API和MP4。我已经尝试将播放速度设置为负数,但它停了下来。我目前的解决方案是

在我的倒带按钮脚本中:

void Update ()
{
    if (rewind == true) {
        VideoController.Backward2Seconds();
    }
}

在我的VideoController脚本

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

有更好的方法吗?因为这很懒惰。

不幸的是,恐怕您的第一次尝试是最好的尝试,而只是您的平台不支持它。它可以在其他设备上使用。根据Videoplayer文档:

对负值的支持是平台依赖

由于该解决方案似乎在您的设备上不起作用,因此考虑到每个帧之间的时间,可以改善您的解决方法。尝试以下内容:

在您的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();
    }

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

唯一的缺点是,您可能会看到一个小故障,视频面板消失了一秒钟。可能很烦人,但不是世界的尽头。

最新更新