我正在尝试以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)。
唯一的缺点是,您可能会看到一个小故障,视频面板消失了一秒钟。可能很烦人,但不是世界的尽头。