如何在 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。如果你不必这样做,你应该可以使用普通方法(非协程)。
唯一的缺点是您可能会看到视频面板瞬间消失的小故障。可以很烦,但不是世界末日。
我正在尝试在 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。如果你不必这样做,你应该可以使用普通方法(非协程)。
唯一的缺点是您可能会看到视频面板瞬间消失的小故障。可以很烦,但不是世界末日。