public void Create(string fileFolder)
        {
            m_handle = Types.INVALID_HANDLE;

            m_assetCreationInfo           = new Types.AssetCreationInfo();
            m_assetCreationInfo.assetPath = fileFolder;
            //m_assetCreationInfo.cacheDir = Application.persistentDataPath;
            m_assetCreationInfo.bufferTime = 2.0f;

            Create(m_assetCreationInfo);
        }
        public void Create(Types.AssetCreationInfo info)
        {
            m_handle = Types.INVALID_HANDLE;

            if (!HvrHelper.Support.IsApplicationStateSupported())
            {
                return;
            }

            try
            {
                UnityInterface.Lock();

                if (HvrPlayerInterface.Initialise())
                {
                    m_assetCreationInfo = info;

                    m_assetCreationInfo.structSize = (uint)Marshal.SizeOf(typeof(Types.AssetCreationInfo));

                    GCHandle assetHandle = GCHandle.Alloc(this);
                    IntPtr   assetPtr    = (IntPtr)assetHandle;
                    m_assetCreationInfo.userData = assetPtr;

                    // https://answers.unity.com/questions/1229036/callbacks-from-c-to-c-are-not-working-in-540f3.html?sort=votes
                    // For both IL2CPP and Mono on an AOT platform (like iOS) it is not possible to marshal an instance method to a function pointer
                    // that can be called from native code. Only static methods in C# code be called from native code like this.
                    m_assetCreationInfo.onInitialized = Callbacks.OnAssetInitialised;
                    m_assetCreationInfo.onRepresentationDataRecieved = Callbacks.OnAssetRepresentationDataReceived;
                    m_assetCreationInfo.onSelectRepresentation       = Callbacks.OnAssetSelectRepresentation;

                    m_handle = HvrPlayerInterfaceAPI.Asset_CreateFromInfo(ref m_assetCreationInfo);

                    if (m_assetCreationInfo.assetPath.StartsWith("tcp"))
                    {
                        m_assetType = AssetSource.RealTime;
                    }
                    else
                    if (m_assetCreationInfo.assetPath.EndsWith("8imanifest"))
                    {
                        m_assetType = AssetSource.VOD;
                    }
                    else
                    {
                        m_assetType = AssetSource.Local;
                    }

#if VERBOSE_LOGGING
                    Debug.Log("Create " + GetType().Name + " Handle:" + handle);
#endif

                    UnityInterface.SceneObjectsAdd(handle, GetType().Name + handle, GetType().FullName);
                }
            }
            catch (Exception e)
            {
                Debug.LogError(e.Message);
            }
            finally
            {
                UnityInterface.Unlock();
            }
        }
 public static extern Int32 Asset_CreateFromInfo([In] ref Types.AssetCreationInfo info);