/// <summary>
 /// Initialize the Media Player for the Editor
 /// </summary>
 /// <param name="localMediaPlayerID">ID of the media player</param>
 /// <param name="videoEndedCallback">Callback when video ends</param>
 /// <param name="startPreparedCallback">Callback when media player is created</param>
 /// <param name="seekCompletedCallback">Callback when a seek completes</param>
 public void Initialize(int localMediaPlayerID, MediaPlayerEndDelegate videoEndedCallback, MediaPlayerStartDelegate startPreparedCallback, MediaPlayerEndDelegate seekCompletedCallback)
 {
     this.mediaPlayerID = localMediaPlayerID;
     this.startPrepared = startPreparedCallback;
     this.seekCompleted = seekCompletedCallback;
     this.videoEnded    = videoEndedCallback;
 }
            /// <summary>
            /// Creates the streaming media player for the editor
            /// </summary>
            /// <param name="mediaPlayerGO">The media player game object</param>
            /// <param name="source">URL of the media</param>
            /// <param name="localMediaPlayerID">ID of the media player</param>
            /// <returns>
            /// <c>MLResult.Result</c> will be <c>MLResult.Code.Ok</c>
            /// </returns>
            public MLResult CreateStreamingMediaPlayer(GameObject mediaPlayerGO, string source, int localMediaPlayerID)
            {
                this.videoPlayer = mediaPlayerGO.AddComponent <VideoPlayer>();
                //// Add AudioSource
                this.audioSource = mediaPlayerGO.AddComponent <AudioSource>();

                // Create a Url with provided string and test if its a local file
                Uri    uri;
                bool   result = Uri.TryCreate(source, UriKind.Absolute, out uri);
                string path   = result ? source : Path.Combine(Application.streamingAssetsPath, source);

                this.videoPlayer.url = path;

                this.videoPlayer.playOnAwake       = true;
                this.videoPlayer.waitForFirstFrame = true;

                // Setup and attch audio source
                this.audioSource.playOnAwake = false;
                this.SetVolume(30, localMediaPlayerID);
                this.videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
                this.videoPlayer.EnableAudioTrack(0, true);
                this.videoPlayer.SetTargetAudioSource(0, this.audioSource);

                this.videoPlayer.prepareCompleted += this.HandlePrepareCompleted;
                this.videoPlayer.seekCompleted    += this.HandleSeekCompleted;
                this.videoPlayer.loopPointReached += this.HandleVideoEnded;

                return(MLResult.Create(MLResult.Code.Ok));
            }
 /// <summary>
 /// OnDestroy callback is used to unsubscribe to all the events.
 /// </summary>
 private void OnDestroy()
 {
     if (this.videoPlayer)
     {
         this.videoPlayer.prepareCompleted -= this.HandlePrepareCompleted;
         this.videoPlayer.seekCompleted    -= this.HandleSeekCompleted;
         this.videoPlayer.loopPointReached -= this.HandleVideoEnded;
     }
 }