| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | using UnityEngine.Events;using System.Collections.Generic;//-----------------------------------------------------------------------------// Copyright 2015-2021 RenderHeads Ltd.  All rights reserved.//-----------------------------------------------------------------------------namespace RenderHeads.Media.AVProVideo{	[System.Serializable]	public class MediaPlayerLoadEvent : UnityEvent<string> {}	[System.Serializable]	public class MediaPlayerEvent : UnityEvent<MediaPlayer, MediaPlayerEvent.EventType, ErrorCode>	{		public enum EventType		{			MetaDataReady,		// Triggered when meta data(width, duration etc) is available			ReadyToPlay,		// Triggered when the video is loaded and ready to play			Started,			// Triggered when the playback starts			FirstFrameReady,	// Triggered when the first frame has been rendered			FinishedPlaying,	// Triggered when a non-looping video has finished playing			Closing,			// Triggered when the media is closed			Error,				// Triggered when an error occurs			SubtitleChange,		// Triggered when the subtitles change			Stalled,			// Triggered when media is stalled (eg. when lost connection to media stream)			Unstalled,			// Triggered when media is resumed form a stalled state (eg. when lost connection is re-established)			ResolutionChanged,	// Triggered when the resolution of the video has changed (including the load) Useful for adaptive streams			StartedSeeking,		// Triggered when seeking begins			FinishedSeeking,    // Triggered when seeking has finished			StartedBuffering,	// Triggered when buffering begins			FinishedBuffering,	// Triggered when buffering has finished			PropertiesChanged,	// Triggered when any properties (eg stereo packing are changed) - this has to be triggered manually			PlaylistItemChanged,// Triggered when the new item is played in the playlist			PlaylistFinished,	// Triggered when the playlist reaches the end			TextTracksChanged,	// Triggered when the text tracks are added or removed			Paused,				// Triggered when the player is paused			Unpaused,			// Triggered when the player resumes playing			// TODO: 			//StartLoop,		// Triggered when the video starts and is in loop mode			//EndLoop,			// Triggered when the video ends and is in loop mode			//NewFrame			// Trigger when a new video frame is available			TextCueChanged = SubtitleChange,	// Triggered when the text to display changes		}		private List<UnityAction<MediaPlayer, MediaPlayerEvent.EventType, ErrorCode>> _listeners = new List<UnityAction<MediaPlayer, EventType, ErrorCode>>(4);		public bool HasListeners()		{			return (_listeners.Count > 0) || (GetPersistentEventCount() > 0);		}		new public void AddListener(UnityAction<MediaPlayer, MediaPlayerEvent.EventType, ErrorCode> call)		{			if (!_listeners.Contains(call))			{				_listeners.Add(call);				base.AddListener(call);			}		}		new public void RemoveListener(UnityAction<MediaPlayer, MediaPlayerEvent.EventType, ErrorCode> call)		{			int index = _listeners.IndexOf(call);			if (index >= 0)			{				_listeners.RemoveAt(index);				base.RemoveListener(call);			}		}		new public void RemoveAllListeners()		{			_listeners.Clear();			base.RemoveAllListeners();		}	}#if false	public interface IMediaEvents	{		void				AddEventListener(UnityAction<MediaPlayer, MediaPlayerEvent.EventType, ErrorCode> call);		void				RemoveListener(UnityAction<MediaPlayer, MediaPlayerEvent.EventType, ErrorCode> call);		void				RemoveAllEventListeners();	}	public partial class BaseMediaPlayer	{		void AddEventListener(UnityAction<MediaPlayer, MediaPlayerEvent.EventType, ErrorCode> call)		{		}		void RemoveListener(UnityAction<MediaPlayer, MediaPlayerEvent.EventType, ErrorCode> call)		{		}		void RemoveAllEventListeners()		{		}		private MediaPlayerEvent _eventHandler;	}#endif}
 |