public void OpenVideoFile(MediaPlaylist.MediaItem mediaItem)
        {
            bool isMediaAlreadyLoaded = false;

            if (NextPlayer.MediaPath == mediaItem.mediaPath)
            {
                isMediaAlreadyLoaded = true;
            }

            if (!mediaItem.isOverrideTransition)
            {
                SetTransition(_defaultTransition, _defaultTransitionDuration, _defaultTransitionEasing);
            }
            else
            {
                SetTransition(mediaItem.overrideTransition, mediaItem.overrideTransitionDuration, mediaItem.overrideTransitionEasing);
            }

            this.Loop              = NextPlayer.Loop = mediaItem.loop;
            NextPlayer.MediaPath   = new MediaPath(mediaItem.mediaPath);
            this.MediaPath         = new MediaPath(mediaItem.mediaPath);
            NextPlayer.AudioMuted  = _playlistAudioMuted;
            NextPlayer.AudioVolume = _playlistAudioVolume;
            if (_transitionTimer < _currentTransitionDuration && _currentTransition != Transition.None)
            {
                NextPlayer.AudioVolume = 0f;
            }

            if (isMediaAlreadyLoaded)
            {
                NextPlayer.Rewind(false);
                if (_nextItem.startMode == StartMode.Immediate)
                {
                    NextPlayer.Play();
                }
                // TODO: We probably want to wait until the new frame arrives before swapping after a Rewind()
                SwapPlayers();
            }
            else
            {
                if (string.IsNullOrEmpty(NextPlayer.MediaPath.Path))
                {
                    NextPlayer.CloseMedia();
                }
                else
                {
                    NextPlayer.OpenMedia(NextPlayer.MediaPath.PathType, NextPlayer.MediaPath.Path, _nextItem.startMode == StartMode.Immediate);
                }
            }
        }
コード例 #2
0
        public void OpenVideoFile(MediaPlaylist.MediaItem mediaItem)
        {
            bool isMediaAlreadyLoaded = false;

            /*
             * if (NextPlayer.m_VideoPath == mediaItem.filePath && NextPlayer.m_VideoLocation == mediaItem.fileLocation)
             * {
             *      isMediaAlreadyLoaded = true;
             * }*/

            if (mediaItem.isOverrideTransition)
            {
                SetTransition(mediaItem.overrideTransition, mediaItem.overrideTransitionDuration, mediaItem.overrideTransitionEasing.preset);
            }
            else
            {
                SetTransition(_nextTransition, _transitionDuration, _transitionEasing.preset);
            }

            this.m_Loop          = NextPlayer.m_Loop = mediaItem.loop;
            this.m_AutoStart     = NextPlayer.m_AutoStart = mediaItem.autoPlay;
            this.m_VideoLocation = NextPlayer.m_VideoLocation = mediaItem.fileLocation;
            this.m_VideoPath     = NextPlayer.m_VideoPath = mediaItem.filePath;
            this.m_StereoPacking = NextPlayer.m_StereoPacking = mediaItem.stereoPacking;
            this.m_AlphaPacking  = NextPlayer.m_AlphaPacking = mediaItem.alphaPacking;

            if (isMediaAlreadyLoaded)
            {
                NextPlayer.Rewind(false);
                if (_nextItem.startMode == StartMode.Immediate)
                {
                    NextPlayer.Play();
                }
                // TODO: We probably want to wait until the new frame arrives before swapping after a Rewind()
                SwapPlayers();
            }
            else
            {
                if (string.IsNullOrEmpty(NextPlayer.m_VideoPath))
                {
                    NextPlayer.CloseVideo();
                }
                else
                {
                    //NextPlayer.m_AutoStart = false;
                    NextPlayer.OpenVideoFromFile(NextPlayer.m_VideoLocation, NextPlayer.m_VideoPath, _nextItem.startMode == StartMode.Immediate);
                }
            }
        }
コード例 #3
0
 public bool JumpToItem(int index)
 {
     if (_playlistLoopMode == PlaylistLoopMode.Loop)
     {
         if (_playlist.Items.Count > 0)
         {
             index %= _playlist.Items.Count;
             if (index < 0)
             {
                 index += _playlist.Items.Count;
             }
         }
     }
     if (_playlist.HasItemAt(index))
     {
         _playlistIndex = index;
         _nextItem      = _playlist.Items[_playlistIndex];
         OpenVideoFile(_nextItem);
         return(true);
     }
     return(false);
 }
コード例 #4
0
        public void OpenVideoFile(MediaPlaylist.MediaItem mediaItem)
        {
            bool isMediaAlreadyLoaded = false;

            if (NextPlayer.m_VideoPath == mediaItem.filePath && NextPlayer.m_VideoLocation == mediaItem.fileLocation)
            {
                isMediaAlreadyLoaded = true;
            }

            SetTransition(_nextTransition);

            this.m_Loop          = NextPlayer.m_Loop = mediaItem.loop;
            this.m_VideoLocation = NextPlayer.m_VideoLocation = mediaItem.fileLocation;
            this.m_VideoPath     = NextPlayer.m_VideoPath = mediaItem.filePath;
            this.m_StereoPacking = NextPlayer.m_StereoPacking = mediaItem.stereoPacking;
            this.m_AlphaPacking  = NextPlayer.m_AlphaPacking = mediaItem.alphaPacking;

            if (isMediaAlreadyLoaded)
            {
                NextPlayer.Rewind(false);
                NextPlayer.Play();
                // TODO: We probably want to wait until the new frame arrives before swapping after a Rewind()
                SwapPlayers();
            }
            else
            {
                if (string.IsNullOrEmpty(NextPlayer.m_VideoPath))
                {
                    NextPlayer.CloseVideo();
                }
                else
                {
                    //NextPlayer.m_AutoStart = false;
                    NextPlayer.OpenVideoFromFile(NextPlayer.m_VideoLocation, NextPlayer.m_VideoPath, true);
                }
            }
        }
コード例 #5
0
        private void SwapPlayers()
        {
            // Pause the previously playing video
            // This is useful for systems that will struggle to play 2 videos at once
            if (_pausePreviousOnTransition)
            {
                CurrentPlayer.Pause();
            }

            // Tell listeners that the playlist item has changed
            Events.Invoke(this, MediaPlayerEvent.EventType.PlaylistItemChanged, ErrorCode.None);

            // Start the transition
            if (_currentTransition != Transition.None)
            {
                // Create a new transition texture if required
                Texture currentTexture = GetCurrentTexture();
                Texture nextTexture    = GetNextTexture();
                if (currentTexture != null && nextTexture != null)
                {
                    int maxWidth  = Mathf.Max(nextTexture.width, currentTexture.width);
                    int maxHeight = Mathf.Max(nextTexture.height, currentTexture.height);
                    if (_rt != null)
                    {
                        if (_rt.width != maxWidth || _rt.height != maxHeight)
                        {
                            RenderTexture.ReleaseTemporary(_rt = null);
                        }
                    }

                    if (_rt == null)
                    {
                        _rt = RenderTexture.GetTemporary(maxWidth, maxHeight, 0, RenderTextureFormat.Default, RenderTextureReadWrite.Default, 1);
                        Graphics.Blit(currentTexture, _rt);
                    }

                    _material.SetTexture(_propFromTex, currentTexture);

                    _easeFunc        = Easing.GetFunction(_currentTransitionEasing);
                    _transitionTimer = 0f;
                }
                else
                {
                    _transitionTimer = _currentTransitionDuration;
                }
            }

            // Swap the videos
            if (NextPlayer == _playerA)
            {
                _nextPlayer = _playerB;
            }
            else
            {
                _nextPlayer = _playerA;
            }

            // Swap the items
            _currentItem = _nextItem;
            _nextItem    = null;
        }