// TODO: replace all these options with a structure
        public override bool OpenMedia(string path, long offset, string httpHeader, MediaHints mediaHints, int forceFileFormat = 0, bool startWithHighestBitrate = false)
        {
            bool result = false;

            CloseMedia();

            if (_playerInstance == System.IntPtr.Zero)
            {
                _playerInstance = Native.CreatePlayer();

                // Force setting any auth data as it wouldn't have been set without a _playerInstance
                AuthenticationData = _nextAuthData;
            }
            if (_playerInstance != System.IntPtr.Zero)
            {
                result = Native.OpenMedia(_playerInstance, path, httpHeader, (FileFormat)forceFileFormat, startWithHighestBitrate, _use10BitTextures);
                if (result)
                {
                    if (_useLowLiveLatency)
                    {
                        Native.SetLiveOffset(_playerInstance, 0.0);
                    }
                }
                _mediaHints = mediaHints;
            }

            return(result);
        }
        public override bool OpenMedia(string path, long offset, string httpHeader, MediaHints mediaHints, int forceFileFormat = 0, bool startWithHighestBitrate = false)
        {
            bool result = false;

            if (path.StartsWith("http://") ||
                path.StartsWith("https://") ||
                path.StartsWith("file://") ||
                path.StartsWith("blob:") ||
                path.StartsWith("chrome-extension://"))
            {
                int[] idValues = new int[2];
                idValues[0] = -1;
                AVPPlayerInsertVideoElement(path, idValues, (int)_externalLibrary);
                {
                    int playerIndex = idValues[0];
                    _playerID = idValues[1];

                    if (playerIndex > -1)
                    {
                        _playerIndex = playerIndex;
                        _mediaHints  = mediaHints;
                        result       = true;
                    }
                }
            }
            else
            {
                Debug.LogError("[AVProVideo] Unknown URL protocol");
            }

            return(result);
        }
        /// <inheritdoc/>
        public override bool OpenMedia(string path, long offset, string httpHeader, MediaHints mediaHints, int forceFileFormat = 0, bool startWithHighestBitrate = false)
        {
            _texture_AVPro  = (Texture2D)Resources.Load("Textures/AVProVideo-NullPlayer-Frame0");
            _texture_AVPro1 = (Texture2D)Resources.Load("Textures/AVProVideo-NullPlayer-Frame1");

            if (_texture_AVPro)
            {
                _Width  = _texture_AVPro.width;
                _height = _texture_AVPro.height;
            }

            _texture = _texture_AVPro;

            _fakeFlipTime = 0.0f;
            _frameCount   = 0;

            return(true);
        }
        /// <inheritdoc/>
        public virtual void                     CloseMedia()
        {
                        #if UNITY_EDITOR
            _displayRateLastRealTime = 0f;
                        #endif
            _displayRateTimer          = 0f;
            _displayRateLastFrameCount = 0;
            _displayRate = 0f;

            _stallDetectionTimer = 0f;
            _stallDetectionFrame = 0;
            _lastError           = ErrorCode.None;

            _textTracks.Clear();
            _audioTracks.Clear();
            _videoTracks.Clear();
            _currentTextCue = null;
            _mediaHints     = new MediaHints();
        }
 /// <inheritdoc/>
 public abstract bool            OpenMedia(string path, long offset, string customHttpHeaders, MediaHints mediaHints, int forceFileFormat = 0, bool startWithHighestBitrate = false);