frameReady
The VideoPlayer invokes this event when a new frame is ready to be displayed.
Read time 2 minutesLast updated 10 days ago
Definition
- Type: Event
- Namespace: UnityEngine.Video
- Assembly: UnityEngine.VideoModule
public event VideoPlayer.FrameReadyEventHandler frameReady
Remarks
Use this event to:
-
Analyze certain frames of a video.
-
Track progress of the video.
-
Play other effects such as animations or sound effects at a certain frame.
To enable this event so that the VideoPlayer emits it, set the _sendFrameReadyEvents property to . This event is likely to tax the CPU, so set _sendFrameReadyEvents back to when you don’t need it.
truefalseThe VideoPlayer also emits this event if you call VideoPlayer.Pause on a VideoPlayer that's not prepared yet or isn’t currently playing. When you call on a VideoPlayer that's not prepared or playing, it behaves as if you called and then immediately called . This allows you to seek to a certain point in the video, and pause to give it time to prepare the frame before you play it.
Pause()Play()Pause()Examples
// This script plays some audio when the VideoPlayer reaches the frame ( targetFrame ) you set. // Make sure to assign a VideoPlayer component to your GameObject and assign an AudioSource in the Inspector. using UnityEngine;using UnityEngine.UIElements;using UnityEngine.Video;public class FrameReadyExample : MonoBehaviour{ VideoPlayer videoPlayer; public AudioSource audioSource; // The frame you want to play the sound at (set this value in the Inspector). public int targetFrame; void Start() { videoPlayer = GetComponent<VideoPlayer>(); if (videoPlayer != null) { // Prepare the VideoPlayer to play the video. videoPlayer.prepareCompleted += OnPrepareCompleted; videoPlayer.Prepare(); } else Debug.LogWarning("Your GameObject doesn't have a VideoPlayer component."); } void OnPrepareCompleted(VideoPlayer vp) { // Clamp targetFrame to be within the frame count of the video. var totalFrames = videoPlayer.frameCount; targetFrame = Mathf.Clamp(targetFrame, 0, (int)totalFrames - 1); videoPlayer.sendFrameReadyEvents = true; // When frameReady event is invoked, call this function. videoPlayer.frameReady += OnFrameReady; videoPlayer.Play(); } void OnFrameReady(VideoPlayer vp, long frameToPlay) { Debug.Log("Frame " + frameToPlay + " is ready."); // Play the audio when the VideoPlayer video reaches the target frame. if (frameToPlay == targetFrame) { if (audioSource != null) { audioSource.Play(); } else Debug.LogWarning("AudioSource component is missing."); videoPlayer.sendFrameReadyEvents = false; } }}