NewN_UAVPlane/Assets/3rdParty/AVProVideo/Demos/Scripts/Scriptlets/StartEndPoint.cs

77 lines
1.9 KiB
C#

using UnityEngine;
//-----------------------------------------------------------------------------
// Copyright 2015-2018 RenderHeads Ltd. All rights reserverd.
//-----------------------------------------------------------------------------
namespace RenderHeads.Media.AVProVideo.Demos
{
/// <summary>
/// Small demonstration of how you could script the playback of a section of video using a start and end point
/// </summary>
public class StartEndPoint : MonoBehaviour
{
public MediaPlayer _mediaPlayer;
public float _startPointSeconds;
public float _endPointSeconds;
public bool _loop;
[Tooltip("If looping is enabled, this is the time the video rewinds to when it reaches the end point")]
public float _startLoopSeconds;
private bool _isStartQueued;
void OnEnable()
{
_isStartQueued = true;
}
void Update()
{
if (IsVideoLoaded(_mediaPlayer))
{
if (_isStartQueued)
{
DoStart(_mediaPlayer, _startPointSeconds);
_isStartQueued = false;
}
else
{
if (!_loop)
{
DoCheckEnd(_mediaPlayer, _endPointSeconds);
}
else
{
DoCheckLoop(_mediaPlayer, _endPointSeconds, _startLoopSeconds);
}
}
}
}
private static bool IsVideoLoaded(MediaPlayer mp)
{
return (mp != null && mp.Control != null && mp.Control.HasMetaData());
}
private static void DoStart(MediaPlayer mp, float positionSeconds)
{
mp.Control.Seek(positionSeconds * 1000f);
mp.Play();
}
private static void DoCheckEnd(MediaPlayer mp, float positionSeconds)
{
if (mp.Control.IsPlaying() && (mp.Control.GetCurrentTimeMs() >= positionSeconds * 1000f))
{
mp.Pause();
}
}
private static void DoCheckLoop(MediaPlayer mp, float positionSeconds, float positionLoop)
{
if (mp.Control.IsPlaying() && (mp.Control.GetCurrentTimeMs() >= positionSeconds * 1000f))
{
mp.Control.Seek(positionLoop * 1000f);
}
}
}
}