using System; using System.Collections.Generic; using UnityEngine; namespace RenderHeads.Media.AVProVideo { public abstract class BaseMediaPlayer : IMediaPlayer, IMediaControl, IMediaInfo, IMediaProducer, IMediaSubtitles, IDisposable { public abstract string GetVersion(); public abstract bool OpenVideoFromFile(string path, long offset, string httpHeaderJson); public virtual bool OpenVideoFromBuffer(byte[] buffer) { return false; } public abstract void CloseVideo(); public abstract void SetLooping(bool bLooping); public abstract bool IsLooping(); public abstract bool HasMetaData(); public abstract bool CanPlay(); public abstract void Play(); public abstract void Pause(); public abstract void Stop(); public abstract void Rewind(); public abstract void Seek(float timeMs); public abstract void SeekFast(float timeMs); public abstract float GetCurrentTimeMs(); public abstract float GetPlaybackRate(); public abstract void SetPlaybackRate(float rate); public abstract float GetDurationMs(); public abstract int GetVideoWidth(); public abstract int GetVideoHeight(); public virtual Rect GetCropRect() { return new Rect(0f, 0f, 0f, 0f); } public abstract float GetVideoDisplayRate(); public abstract bool HasAudio(); public abstract bool HasVideo(); public abstract bool IsSeeking(); public abstract bool IsPlaying(); public abstract bool IsPaused(); public abstract bool IsFinished(); public abstract bool IsBuffering(); public virtual bool WaitForNextFrame(Camera dummyCamera, int previousFrameCount) { return false; } public virtual int GetTextureCount() { return 1; } public abstract Texture GetTexture(int index = 0); public abstract int GetTextureFrameCount(); public virtual long GetTextureTimeStamp() { return long.MinValue; } public abstract bool RequiresVerticalFlip(); public virtual float[] GetTextureTransform() { float[] array = new float[6]; array[0] = 1f; array[3] = 1f; return array; } public abstract void MuteAudio(bool bMuted); public abstract bool IsMuted(); public abstract void SetVolume(float volume); public virtual void SetBalance(float balance) { } public abstract float GetVolume(); public virtual float GetBalance() { return 0f; } public abstract int GetAudioTrackCount(); public virtual string GetAudioTrackId(int index) { return index.ToString(); } public abstract int GetCurrentAudioTrack(); public abstract void SetAudioTrack(int index); public abstract string GetCurrentAudioTrackId(); public abstract int GetCurrentAudioTrackBitrate(); public virtual int GetNumAudioChannels() { return -1; } public virtual void SetAudioHeadRotation(Quaternion q) { } public virtual void ResetAudioHeadRotation() { } public virtual void SetAudioChannelMode(Audio360ChannelMode channelMode) { } public virtual void SetAudioFocusEnabled(bool enabled) { } public virtual void SetAudioFocusProperties(float offFocusLevel, float widthDegrees) { } public virtual void SetAudioFocusRotation(Quaternion q) { } public virtual void ResetAudioFocus() { } public abstract int GetVideoTrackCount(); public virtual string GetVideoTrackId(int index) { return index.ToString(); } public abstract int GetCurrentVideoTrack(); public abstract void SetVideoTrack(int index); public abstract string GetCurrentVideoTrackId(); public abstract int GetCurrentVideoTrackBitrate(); public abstract float GetVideoFrameRate(); public abstract float GetBufferingProgress(); public abstract void Update(); public abstract void Render(); public abstract void Dispose(); public ErrorCode GetLastError() { return this._lastError; } public string GetPlayerDescription() { return this._playerDescription; } public virtual bool PlayerSupportsLinearColorSpace() { return true; } public virtual int GetBufferedTimeRangeCount() { return 0; } public virtual bool GetBufferedTimeRange(int index, ref float startTimeMs, ref float endTimeMs) { return false; } public void SetTextureProperties(FilterMode filterMode = FilterMode.Bilinear, TextureWrapMode wrapMode = TextureWrapMode.Clamp, int anisoLevel = 0) { this._defaultTextureFilterMode = filterMode; this._defaultTextureWrapMode = wrapMode; this._defaultTextureAnisoLevel = anisoLevel; for (int i = 0; i < this.GetTextureCount(); i++) { this.ApplyTextureProperties(this.GetTexture(i)); } } protected virtual void ApplyTextureProperties(Texture texture) { if (texture != null) { texture.filterMode = this._defaultTextureFilterMode; texture.wrapMode = this._defaultTextureWrapMode; texture.anisoLevel = this._defaultTextureAnisoLevel; } } public virtual void GrabAudio(float[] buffer, int floatCount, int channelCount) { } public virtual bool IsPlaybackStalled() { return false; } public bool LoadSubtitlesSRT(string data) { if (string.IsNullOrEmpty(data)) { this._subtitles = null; this._currentSubtitle = null; } else { this._subtitles = Helper.LoadSubtitlesSRT(data); } return this._subtitles != null; } public virtual void UpdateSubtitles() { if (this._subtitles != null) { float currentTimeMs = this.GetCurrentTimeMs(); int num = 0; if (this._currentSubtitle != null && !this._currentSubtitle.IsTime(currentTimeMs)) { if (currentTimeMs > (float)this._currentSubtitle.timeEndMs) { num = this._currentSubtitle.index + 1; } this._currentSubtitle = null; } if (this._currentSubtitle == null) { for (int i = num; i < this._subtitles.Count; i++) { if (this._subtitles[i].IsTime(currentTimeMs)) { this._currentSubtitle = this._subtitles[i]; break; } } } } } public virtual int GetSubtitleIndex() { int result = -1; if (this._currentSubtitle != null) { result = this._currentSubtitle.index; } return result; } public virtual string GetSubtitleText() { string result = string.Empty; if (this._currentSubtitle != null) { result = this._currentSubtitle.text; } return result; } public virtual void OnEnable() { } protected string _playerDescription = string.Empty; protected ErrorCode _lastError; protected FilterMode _defaultTextureFilterMode = FilterMode.Bilinear; protected TextureWrapMode _defaultTextureWrapMode = TextureWrapMode.Clamp; protected int _defaultTextureAnisoLevel = 1; protected List _subtitles; protected Subtitle _currentSubtitle; } }