繁体   English   中英

检测 VideoPlayer 何时播放完毕

[英]Detect when VideoPlayer has finished playing

我有一个 MovieController 类来管理我的项目中的视频。 我正在使用 Unity 5.6 中引入的新视频播放器组件。

我想在电影播放完毕后调用一个方法。 到目前为止,这个方法只是一个Debug.Log ,你可以看到:

using UnityEngine;
using UnityEngine.Video;

public class MovieController : MonoBehaviour
{
    private VideoPlayer m_VideoPlayer;

    void Awake () 
    {
        m_VideoPlayer = GetComponent<VideoPlayer>();
        m_VideoPlayer.loopPointReached += OnMovieFinished; // loopPointReached is the event for the end of the video
    }

    void OnMovieFinished(VideoPlayer player)
    {
        Debug.Log("Event for movie end called");
        player.Stop();
    }
}

我的问题是在视频结束时没有调用OnMovieFinished ,我只是以黑屏结束,控制台中没有任何内容。

我不信任或使用VideoPlayer API 中的事件,因为我也遇到了它们的问题。 你看到的是一个几个月没有修复的错误。

如果要检测视频是否播放完毕,请使用协程来检查 while 循环中的每一帧videoPlayer.isPlaying 当while循环存在时,表示视频播放完毕。

while (videoPlayer.isPlaying)
{
    yield return null;
}

//Done Playing

我现在不能测试这个来检查暂停功能是否影响videoPlayer.isPlaying但你可以自己测试。


另一种方法是检查frame是否与frameCount相同。 如果这是真的,您就知道视频已播放完毕。

if(videoPlayer.frame == videoPlayer.frameCount)
{
    //Video has finshed playing!
}

如果这些都不能解决您的问题,请提交错误报告。

有趣的是,这在 Unity 2018.4.25(我正在使用的当前版本)中仍然不能完全按预期工作。 在启动时播放视频通常会导致 isPlaying 为 false(不播放就跳出视频,同时测试

(videoPlayer.frame == videoPlayer.frameCount)

在移动设备 (android) 上似乎不能可靠地工作,因为视频将在视频播放完所有帧之前停止播放(isPlaying == false)(通常是几帧,我认为是跳帧)。

我发现

if (( videoPlayer.frame) > 0 && (videoPlayer.isPlaying == false))

捕获了我在移动设备上遇到的用例问题,但是可能还有更多有趣的用例和组合需要处理。 我将上面的测试放入 update() 而不是协程中。

哈。

using UnityEngine.Video;

private VideoPlayer vid;
private float beginning;

void Awake()
{
    vid = GetComponent<VideoPlayer>();
    beginning = Time.time;
    vid.Play();
    StartCoroutine(waitmethod());
}

IEnumerator waitmethod()
{
    while (Time.time - beginning < vid.length)
    {
        yield return null;
    }
    runyournext();
}

你可以使用

videoPlayer.loopPointReached += OnMovieFinished;

//the action on finish
void OnMovieFinished(UnityEngine.Video.VideoPlayer vp)
{
    vp.playbackSpeed = vp.playbackSpeed / 10.0F;
}

你可以在这里看到更多https://docs.unity3d.com/ScriptReference/Video.VideoPlayer.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM