static void g_Player_PlayBackStopped(g_Player.MediaType type, int stoptime, string filename)
 {
   if (type == g_Player.MediaType.TV)
   {
     SetNewChannel(-1);
   }
 }
        public IPlayer Create(string filename, g_Player.MediaType type)
        {
			// hack to get around the MP 1.3 Alpha bug with non http URLs
            /*if (filename != PreparedUrl)
                throw new OnlineVideosException("Cannot play a different url than this PlayerFactory was created with!");
            else*/
                return PreparedPlayer;
        }              
示例#3
0
 public IPlayer Create(string filename, g_Player.MediaType type)
 {
     /*
     if (filename != PreparedUrl)
         throw new OnlineVideosException("Cannot play a different url than this PlayerFactory was created with!");
     else
        */
         return PreparedPlayer;
 }
    /// <summary>
    /// Handles the g_Player.PlayBackEnded event
    /// </summary>
    /// <param name="type"></param>
    /// <param name="s"></param>
    public void OnVideoEnded(g_Player.MediaType type, string s)
    {
      // do not handle e.g. visualization window, last.fm player, etc
      if (type == g_Player.MediaType.Music)
      {
        return;
      }

      if (currentSettings.verboseLog)
      {
        Log.Debug("ViewModeSwitcher: On Video Ended");
      }
      LastSwitchedAspectRatio = 0f;
      isPlaying = false;
    }
    private void OnPlayBackStarted(g_Player.MediaType type, string filename)
    {
      try
      {
        if (type == g_Player.MediaType.Music || Util.Utils.IsLastFMStream(filename))
        {
          Thread stateThread = new Thread(new ParameterizedThreadStart(PlaybackStartedThread));
          stateThread.IsBackground = true;
          stateThread.Name = "Scrobbler event";
          stateThread.Start((object)filename);

          Thread LoadThread = new Thread(new ThreadStart(OnSongLoadedThread));
          LoadThread.IsBackground = true;
          LoadThread.Name = "Scrobbler loader";
          LoadThread.Start();
        }
      }
      catch (Exception ex)
      {
        Log.Error("Audioscrobbler plugin: Error creating threads on playback start - {0}", ex.Message);
      }
    }
示例#6
0
    private void OnPlayBackStarted(g_Player.MediaType type, string filename)
    {
      // when we are watching TV and suddenly decides to watch a audio/video etc., we want to make sure that the TV is stopped on server.
      GUIWindow currentWindow = GUIWindowManager.GetWindow(GUIWindowManager.ActiveWindow);

      if (type == g_Player.MediaType.Radio || type == g_Player.MediaType.TV)
      {
        UpdateGUIonPlaybackStateChange(true);
      }

      if (currentWindow.IsTv && type == g_Player.MediaType.TV)
      {
        return;
      }
      if (GUIWindowManager.ActiveWindow == (int)Window.WINDOW_RADIO || GUIWindowManager.ActiveWindow == (int)Window.WINDOW_RADIO_GUIDE)
      {
        return;
      }

      //gemx: fix for 0001181: Videoplayback does not work if tvservice.exe is not running
      bool isTS = (Card != null && Card.IsTimeShifting);
      if (Connected && isTS)
      {
        Card.StopTimeShifting();
      }
    }
示例#7
0
 public IPlayer Create(string fileName, g_Player.MediaType type)
 {
   IPlayer newPlayer = null;
   try
   {
     g_Player.MediaType? paramType = type as g_Player.MediaType?;
     if (paramType.HasValue)
     {
       newPlayer = Create(fileName, paramType);
     }
     else
     {
       newPlayer = Create(fileName, null);
     }
   }
   catch (Exception ex)
   {
     Log.Error("PlayerFactory: Error creating player instance - {0}", ex.Message);
     newPlayer = Create(fileName, null);
   }
   return newPlayer;
 }
        private void onPlaybackStarted(g_Player.MediaType type, string filename)
        {
            if (_playerState == MoviePlayerState.Processing && g_Player.Player.Playing) {
                logger.Info("Playback Started: Internal, File={0}", filename);

                // get the duration of the media
                updateMediaDuration(queuedMedia);

                // get the movie
                DBMovieInfo movie = queuedMedia.AttachedMovies[0];

                // and jump to our resume position if necessary
                if (_resumeActive) {
                  if (g_Player.IsDVD && !movie.LocalMedia[0].IsBluray) {
                        logger.Debug("Resume: DVD state.");
                        g_Player.Player.SetResumeState(movie.ActiveUserSettings.ResumeData.Data);
                    }
                    else {
                        logger.Debug("Resume: Time={0}", movie.ActiveUserSettings.ResumeTime);
                        GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_SEEK_POSITION, 0, 0, 0, 0, 0, null);
                        msg.Param1 = movie.ActiveUserSettings.ResumeTime;
                        GUIGraphicsContext.SendMessage(msg);
                    }
                    // deactivate resume and force play
                    _resumeActive = false;
                    _forcePlay = false;
                }

                // Trigger Movie started
                onMediaStarted(queuedMedia);
            }
        }
    private void DoOnStarted(g_Player.MediaType type, string filename)
    {
      Log.Debug("GUIMusicPlayingNow: g_Player_PlayBackStarted for {0}", filename);

      ImagePathContainer.Clear();
      CurrentTrackFileName = filename;
      GetTrackTags();

      CurrentThumbFileName = GUIMusicBaseWindow.GetCoverArt(false, CurrentTrackFileName, CurrentTrackTag);

      if (string.IsNullOrEmpty(CurrentThumbFileName))
        // no LOCAL Thumb found because user has bad settings -> check if there is a folder.jpg in the share
      {
        CurrentThumbFileName = Util.Utils.GetFolderThumb(CurrentTrackFileName);
        if (!Util.Utils.FileExistsInCache(CurrentThumbFileName))
        {
          CurrentThumbFileName = string.Empty;
        }
      }

      if (!string.IsNullOrEmpty(CurrentThumbFileName))
      {
        // let us test if there is a larger cover art image
        string strLarge = Util.Utils.ConvertToLargeCoverArt(CurrentThumbFileName);
        if (Util.Utils.FileExistsInCache(strLarge))
        {
          CurrentThumbFileName = strLarge;
        }
        AddImageToImagePathContainer(CurrentThumbFileName);
      }

      UpdateImagePathContainer();
      UpdateTrackInfo();

      // Do last.fm updates
      if (g_Player.IsMusic && _lookupSimilarTracks && g_Player.CurrentPosition >= 10.0 && lstSimilarTracks.Count == 0)
      {
        Log.Debug("GUIMusicPlayingNow: Do Last.FM lookup for similar trracks");
        UpdateSimilarTracks(CurrentTrackFileName);
      }


    }
    private void OnPlayBackStopped(g_Player.MediaType type, int stoptime, string filename)
    {
      if (!ControlsInitialized || type != g_Player.MediaType.Music)
      {
        return;
      }

      if (GUIWindowManager.ActiveWindow == GetID && !_isStopped)
      {
        _isStopped = true;
        Log.Debug("GUIMusicPlayingNow: g_Player_PlayBackStopped for {0} - stoptime: {1}", filename, stoptime);
        Action action = new Action();
        action.wID = Action.ActionType.ACTION_PREVIOUS_MENU;
        GUIGraphicsContext.OnAction(action);
      }
    }
 public OnlineVideosPlayer(g_Player.MediaType type)
     : base(type)
 { }
        void g_Player_PlayBackEnded(g_Player.MediaType type, string filename)
        {
            try
            {
                if (currentPlayingItem != null && currentPlayingItem.Util != null)
                {
                    double percent = g_Player.Duration > 0 ? g_Player.CurrentPosition / g_Player.Duration : 0;
                    currentPlayingItem.Util.OnPlaybackEnded(currentPlayingItem.Video, currentPlayingItem.FileName, percent, false);
                }
            }
            catch (Exception ex)
            {
                Log.Instance.Warn("Error on Util.OnPlaybackEnded: {0}", ex);
            }

            if (currentPlaylist != null)
            {
                if ((g_Player.Player != null && g_Player.Player.GetType().Assembly == typeof(GUIOnlineVideos).Assembly) ||
                     g_Player.Player == null && (filename == "http://localhost/OnlineVideo.mp4" || (currentPlayingItem != null && filename == currentPlayingItem.FileName)))
                {
                    PlayNextPlaylistItem();
                }
                else
                {
                    // some other playback ended, and a playlist is still set here -> clear it
                    currentPlaylist = null;
                    currentPlayingItem = null;
                }
            }
            else
            {
                TrackPlayback();
                currentPlayingItem = null;
            }
        }
示例#13
0
    public static bool PlayRecording(Recording rec, double startOffset, g_Player.MediaType mediaType)
    {
      string fileName = GetFileNameForRecording(rec);

      bool useRTSP = TVHome.UseRTSP();
      string chapters = useRTSP ? TVHome.TvServer.GetChaptersForFileName(rec.IdRecording) : null;

      Log.Info("PlayRecording:{0} - using rtsp mode:{1}", fileName, useRTSP);
      if (g_Player.Play(fileName, mediaType, chapters, false)) // Force to use TsReader if true it will use Movie Codec and Splitter
      {
        if (Utils.IsVideo(fileName) && !g_Player.IsRadio)
        {
          g_Player.ShowFullScreenWindow();
        }
        if (startOffset > 0)
        {
          g_Player.SeekAbsolute(startOffset);
        }
        else if (startOffset == -1)
        {
          // 5 second margin is used that the TsReader wont stop playback right after it has been started
          double dTime = g_Player.Duration - 5;
          g_Player.SeekAbsolute(dTime);
        }
        
        TvRecorded.SetActiveRecording(rec);

        //populates recording metadata to g_player;
        g_Player.currentFileName = rec.FileName;
        g_Player.currentTitle = GetDisplayTitle(rec);
        g_Player.currentDescription = rec.Description;

        rec.TimesWatched++;
        rec.Persist();

        return true;
      }
      return false;
    }
    private void OnPlayBackStarted(g_Player.MediaType type, string filename)
    {
      if (type != g_Player.MediaType.Video)
      {
        return;
      }
      AddFileToDatabase(filename);

      int idFile = VideoDatabase.GetFileId(filename);
      if (idFile != -1)
      {
        int movieDuration = (int)g_Player.Duration;
        VideoDatabase.SetMovieDuration(idFile, movieDuration);
      }
    }
    private void OnPlayBackEnded(g_Player.MediaType type, string filename)
    {
      if (type != g_Player.MediaType.Video)
      {
        return;
      }

      // Handle all movie files from idMovie
      ArrayList movies = new ArrayList();
      HashSet<string> watchedMovies = new HashSet<string>();

      int iidMovie = VideoDatabase.GetMovieId(filename);
      if (iidMovie >= 0)
      {
        VideoDatabase.GetFiles(iidMovie, ref movies);

        for (int i = 0; i < movies.Count; i++)
        {
          string strFilePath = (string)movies[i];
          byte[] resumeData = null;
          int idFile = VideoDatabase.GetFileId(strFilePath);
          if (idFile < 0)
          {
            break;
          }
          // Set resumedata to zero
          VideoDatabase.GetMovieStopTimeAndResumeData(idFile, out resumeData);
          VideoDatabase.SetMovieStopTimeAndResumeData(idFile, 0, resumeData);
          watchedMovies.Add(strFilePath);
        }

        int playTimePercentage = 0;

        if (_isStacked && _totalMovieDuration != 0)
        {
          int duration = 0;

          for (int i = 0; i < _stackedMovieFiles.Count; i++)
          {
            int fileID = VideoDatabase.GetFileId((string)_stackedMovieFiles[i]);

            if (filename != (string)_stackedMovieFiles[i])
            {
              duration += VideoDatabase.GetMovieDuration(fileID);
              continue;
            }
            playTimePercentage = (int)(100 * (duration + g_Player.Player.CurrentPosition) / _totalMovieDuration);
            break;
          }
        }
        else
        {
          playTimePercentage = 100;
        }

        if (playTimePercentage >= 80)
        {
          IMDBMovie details = new IMDBMovie();
          VideoDatabase.GetMovieInfoById(iidMovie, ref details);
          details.Watched = 1;
          VideoDatabase.SetWatched(details);
          VideoDatabase.SetMovieWatchedStatus(iidMovie, true);
        }
      }
    }
示例#16
0
    private void OnPlayBackStarted(g_Player.MediaType type, string filename)
    {
      if (type != g_Player.MediaType.Video)
      {
        return;
      }

      if (!Util.Utils.IsRemoteUrl(filename))
      {
        int idFile = VideoDatabase.GetFileId(filename);

        if (idFile == -1)
        {
          AddFileToDatabase(filename);
          idFile = VideoDatabase.GetFileId(filename);
        }

        if (idFile != -1)
        {
          int videoDuration = (int) g_Player.Duration;
          VideoDatabase.SetVideoDuration(idFile, videoDuration);
        }
      }
    }
 public VideoPlayerVMR7(g_Player.MediaType type)
 {
   _mediaType = type;
 }
        void g_Player_PlayBackStopped(g_Player.MediaType type, int stoptime, string filename)
        {
            try
            {
                if (currentPlayingItem != null && currentPlayingItem.Util != null)
                {
                    double percent = g_Player.Duration > 0 ? g_Player.CurrentPosition / g_Player.Duration : 0;
                    currentPlayingItem.Util.OnPlaybackEnded(currentPlayingItem.Video, currentPlayingItem.FileName, percent, true);
                }
            }
            catch (Exception ex)
            {
                Log.Instance.Warn("Error on Util.OnPlaybackEnded: {0}", ex);
            }

            if (stoptime > 0 && g_Player.Duration > 0 && (stoptime / g_Player.Duration) > 0.8) TrackPlayback();
            currentPlayingItem = null;
        }
    private void DoOnEnded(g_Player.MediaType type, string filename)
    {
      if (GUIWindowManager.ActiveWindow == GetID)
      {
        Log.Debug("GUIMusicPlayingNow: g_Player_PlayBackEnded for {0}", filename);

        if (!g_Player.Playing && NextTrackTag == null && !_isStopped)
        {
          _isStopped = true;
          Log.Debug("GUIMusicPlayingNow: All playlist items played - returning to previous window");
          Action action = new Action();
          action.wID = Action.ActionType.ACTION_PREVIOUS_MENU;
          GUIGraphicsContext.OnAction(action);
        }
      }
    }
示例#20
0
 public BDPlayer(g_Player.MediaType mediaType)
 {      
 }
    private void OnPlayBackStarted(g_Player.MediaType type, string filename)
    {
      if (!ControlsInitialized || type != g_Player.MediaType.Music)
      {
        return;
      }

      GUIGraphicsContext.form.Invoke(new PlaybackChangedDelegate(DoOnStarted), new object[] {type, filename});
    }
示例#22
0
 private void g_Player_PlayBackChanged(g_Player.MediaType type, int stoptime, string filename)
 {
   SettingsLoaded = false; // we should reload
 }
示例#23
0
        private void onPlayBackEnded(g_Player.MediaType type, string filename)
        {
            if (type != g_Player.MediaType.Video || _playerState != MoviePlayerState.Playing)
                return;

            if (handleCustomIntroEnded())
                return;

            logger.Debug("OnPlayBackEnded filename={0} currentMovie={1} currentPart={2}", filename, _activeMovie.Title, _activePart);
            if (_activeMovie.LocalMedia.Count >= (_activePart + 1)) {
                logger.Debug("Goto next part");
                _activePart++;
                playMovie(_activeMovie, _activePart);
            }
            else {
                onMovieEnded(_activeMovie);
            }
        }
示例#24
0
 private void g_Player_PlayBackEnded(g_Player.MediaType type, string filename)
 {
   SettingsLoaded = false; // we should reload
   // playback ended, if we are the current window, close our context menu, so we also get closed
   if (type != g_Player.MediaType.Recording && type != g_Player.MediaType.TV) return;
   if (GUIWindowManager.ActiveWindow != GetID) return;
   if (!_IsClosingDialog)
   {
     _IsClosingDialog = true;
     GUIDialogWindow.CloseRoutedWindow();
     _IsClosingDialog = false;
   }
 }
示例#25
0
        private void onPlayBackStoppedOrChanged(g_Player.MediaType type, int timeMovieStopped, string filename)
        {
            if (type != g_Player.MediaType.Video || _playerState != MoviePlayerState.Playing)
                return;

            if (customIntrosPlayed > 0) return;

            logger.Debug("OnPlayBackStoppedOrChanged: File={0}, Movie={1}, Part={2}, TimeStopped={3}", filename, _activeMovie.Title, _activePart, timeMovieStopped);

            // Because we can't get duration for DVD's at start like with normal files
            // we are getting the duration when the DVD is stopped. If the duration of
            // feature is an hour or more it's probably the main feature and we will update
            // the database.
            if (g_Player.IsDVD && (g_Player.Player.Duration >= 3600)) {
                DBLocalMedia playingFile = _activeMovie.LocalMedia[_activePart - 1];
                updateMediaDuration(playingFile);
            }

            int requiredWatchedPercent = MovingPicturesCore.Settings.MinimumWatchPercentage;
            int watchedPercentage = _activeMovie.GetPercentage(_activePart, timeMovieStopped);
            int resumeTitleBD = g_Player.SetResumeBDTitleState;

            logger.Debug("Watched: Percentage=" + watchedPercentage + ", Required=" + requiredWatchedPercent);

            // if enough of the movie has been watched
            if (watchedPercentage >= requiredWatchedPercent) {
                // run movie ended logic
                onMovieEnded(_activeMovie);
            }
            // otherwise, store resume data.
            else {
                byte[] resumeData = null;
                g_Player.Player.GetResumeState(out resumeData);
                updateMovieResumeState(_activeMovie, _activePart, timeMovieStopped, resumeData, resumeTitleBD);
                // run movie stopped logic
                onMovieStopped(_activeMovie);
            }
        }
示例#26
0
    private void DoOnPlayBackStoppedOrChanged(g_Player.MediaType type, int timeMovieStopped, string filename,
                                              string caller)
    {
      if (type != g_Player.MediaType.Video || filename.EndsWith("&txe=.wmv"))
      {
        return;
      }

      // BD and IMAGES stop time (change to index.bdmv if mpls file is played or to IMG file)
      ISelectBDHandler selectBDHandler = GetSelectBDHandler();
      selectBDHandler.IsBDPlayList(ref filename);
      // Handle all movie files from idMovie
      ArrayList movies = new ArrayList();
      int iidMovie = VideoDatabase.GetMovieId(filename);
      VideoDatabase.GetFilesForMovie(iidMovie, ref movies);
      HashSet<string> watchedMovies = new HashSet<string>();

      int playTimePercentage = 0;

      // Stacked movies duration
      if (IsStacked && TotalMovieDuration != 0)
      {
        int duration = 0;

        for (int i = 0; i < StackedMovieFiles.Count; i++)
        {
          int fileID = VideoDatabase.GetFileId((string)StackedMovieFiles[i]);

          if (g_Player.CurrentFile != (string)StackedMovieFiles[i])
          {
            duration += VideoDatabase.GetVideoDuration(fileID);
            continue;
          }
          playTimePercentage = (100 * (duration + timeMovieStopped) / TotalMovieDuration);
          break;
        }
      }
      else
      {
        if (g_Player.Player.Duration >= 1)
        {
          playTimePercentage = (int)Math.Ceiling((timeMovieStopped / g_Player.Player.Duration) * 100);
        }
      }

      if (movies.Count <= 0)
      {
        return;
      }

      for (int i = 0; i < movies.Count; i++)
      {
        string strFilePath = (string)movies[i];

        int idFile = VideoDatabase.GetFileId(strFilePath);
        int idMovie = VideoDatabase.GetMovieId(strFilePath);

        if (idFile < 0)
        {
          break;
        }

        if (g_Player.IsDVDMenu)
        {
          VideoDatabase.SetMovieStopTimeAndResumeData(idFile, 0, null, g_Player.SetResumeBDTitleState);
          watchedMovies.Add(strFilePath);
          VideoDatabase.SetMovieWatchedStatus(idMovie, true, 100);
          VideoDatabase.MovieWatchedCountIncrease(idMovie);
        }
        else if ((filename.Trim().ToLowerInvariant().Equals(strFilePath.Trim().ToLowerInvariant())) && (timeMovieStopped > 0) && g_Player.SetResumeBDTitleState != -2)
        {
          byte[] resumeData = null;
          g_Player.Player.GetResumeState(out resumeData);
          Log.Info("GUIVideoFiles: {0} idFile={1} timeMovieStopped={2} resumeData={3} bdtitle={4}", caller, idFile, timeMovieStopped,
                   resumeData, g_Player.SetResumeBDTitleState);
          VideoDatabase.SetMovieStopTimeAndResumeData(idFile, timeMovieStopped, resumeData, g_Player.SetResumeBDTitleState);
          Log.Debug("GUIVideoFiles: {0} store resume time", caller);

          //Set file "watched" only if  user % value or higher played time (share view)
          if (playTimePercentage >= _watchedPercentage)
          {
            watchedMovies.Add(strFilePath);
            VideoDatabase.SetMovieWatchedStatus(idMovie, true, playTimePercentage);
            VideoDatabase.MovieWatchedCountIncrease(idMovie);
          }
          else
          {
            int iPercent = 0; // Not used, just needed for the watched status call
            int iTImesWatched = 0;
            bool watched = VideoDatabase.GetmovieWatchedStatus(idMovie, out iPercent,
                                                               out iTImesWatched);

            if (!watched)
            {
              VideoDatabase.SetMovieWatchedStatus(idMovie, false, playTimePercentage);
            }
            else // Update new percentage if already watched
            {
              VideoDatabase.SetMovieWatchedStatus(idMovie, true, playTimePercentage);
            }
          }
        }
        else
        {
          VideoDatabase.DeleteMovieStopTime(idFile);
        }
      }
      if (_markWatchedFiles)
      {
        // Update db view watched status for played movie
        IMDBMovie movie = new IMDBMovie();
        VideoDatabase.GetMovieInfo(filename, ref movie);

        if (!movie.IsEmpty)
        //Flag movie "watched" status only if user % value or higher played time (database view)
        {
          if (playTimePercentage >= _watchedPercentage || g_Player.IsDVDMenu)
          {
            movie.Watched = 1;
          }
          movie.DateWatched = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
          VideoDatabase.SetMovieInfoById(movie.ID, ref movie);
        }

        if (VideoState.StartWindow != GetID) // Is play initiator dbview?
        {
          UpdateButtonStates();
        }
      }

      if (SubEngine.GetInstance().IsModified())
      {
        bool shouldSave = false;

        if (SubEngine.GetInstance().AutoSaveType == AutoSaveTypeEnum.ASK)
        {
          if (!g_Player.Paused)
          {
            g_Player.Pause();
          }

          GUIDialogYesNo dlgYesNo = (GUIDialogYesNo)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_YES_NO);
          dlgYesNo.SetHeading(GUILocalizeStrings.Get(1318));// Save subtitle
          dlgYesNo.SetLine(1, GUILocalizeStrings.Get(1319)); // Save modified subtitle?
          dlgYesNo.SetDefaultToYes(true);
          dlgYesNo.DoModal(GUIWindowManager.ActiveWindow);
          shouldSave = dlgYesNo.IsConfirmed;
        }

        if (shouldSave || SubEngine.GetInstance().AutoSaveType == AutoSaveTypeEnum.ALWAYS)
        {
          SubEngine.GetInstance().SaveToDisk();
        }
      }
    }
示例#27
0
    /// <summary>
    /// We do not want to change neither the enum nor the previous Create overloaded calls to maintain backward compatibility
    /// </summary>
    /// <param name="fileName"></param>
    /// <param name="type"></param>
    /// <returns></returns>
    private IPlayer Create(string aFileName, g_Player.MediaType? aMediaType)
    {
      try
      {
        // Set to anything here as it will only be passed if aMediaType is not null
        g_Player.MediaType localType = g_Player.MediaType.Video;
        if (aMediaType != null && aMediaType != g_Player.MediaType.Unknown)
        {
          localType = (g_Player.MediaType)aMediaType;
        }

        // Get settings only once
        using (Settings xmlreader = new MPSettings())
        {
          string strAudioPlayer = xmlreader.GetValueAsString("audioplayer", "playerId", "0"); // BASS Player
          bool Vmr9Enabled = xmlreader.GetValueAsBool("musicvideo", "useVMR9", true);
          bool InternalBDPlayer = xmlreader.GetValueAsBool("bdplayer", "useInternalBDPlayer", true);
          bool Usemoviecodects = xmlreader.GetValueAsBool("movieplayer", "usemoviecodects", false);

          if (aFileName.ToLowerInvariant().IndexOf("rtsp:") >= 0)
          {
            if (aMediaType != null)
            {
              return new TSReaderPlayer(localType);
            }
            else
            {
              return new TSReaderPlayer();
            }
          }

          if (aFileName.StartsWith("mms:") && aFileName.EndsWith(".ymvp"))
          {
            if (Vmr9Enabled)
            {
              return new VideoPlayerVMR9();
            }
            else
            {
              return new AudioPlayerWMP9();
            }
          }

          string extension = Path.GetExtension(aFileName).ToLowerInvariant();
          if (extension == ".bdmv")
          {
            if (InternalBDPlayer)
            {
            return new BDPlayer();
          }
            else
            {
              return new VideoPlayerVMR9();
            }
          }

          if (extension != ".tv" && extension != ".sbe" && extension != ".dvr-ms" &&
              aFileName.ToLowerInvariant().IndexOf(".tsbuffer") < 0 && aFileName.ToLowerInvariant().IndexOf("radio.tsbuffer") < 0)
          {
            IPlayer newPlayer = GetExternalPlayer(aFileName);
            if (newPlayer != null)
            {
              Log.Info("PlayerFactory: Disabling DX9 exclusive mode");
              GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_SWITCH_FULL_WINDOWED, 0, 0, 0, 0, 0, null);
              GUIWindowManager.SendMessage(msg);
              return newPlayer;
            }
          }

          if (Util.Utils.IsVideo(aFileName))
          {
            if (extension == ".tv" || extension == ".sbe" || extension == ".dvr-ms")
            {
              //if (extension == ".sbe" || extension == ".dvr-ms")
              //{
              //  //GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_RECORDER_STOP_TIMESHIFT, 0, 0, 0, 0, 0, null);
              //  //GUIWindowManager.SendMessage(msg);
              //}
              return new StreamBufferPlayer9();
            }
            if (extension == ".ifo" || Util.VirtualDirectory.IsImageFile(extension))
            {
              return new DVDPlayer9();
            }
          }

          // Use TsReader for timeshift buffer file for TvEngine3 & .ts recordings etc.
          if (extension == ".tsbuffer" || extension == ".ts" || extension == ".rec")
            //new support for Topfield recordings
          {
            if (aFileName.ToLowerInvariant().IndexOf("radio.tsbuffer") >= 0)
            {
              if (aMediaType != null)
              {
                return new BaseTSReaderPlayer(localType);
              }
              else
              {
                return new BaseTSReaderPlayer();
              }
            }
            if (aMediaType != null)
            {
              if (
                (GUIWindow.Window)
                (Enum.Parse(typeof(GUIWindow.Window), GUIWindowManager.ActiveWindow.ToString())) ==
                GUIWindow.Window.WINDOW_VIDEOS && Usemoviecodects || (g_Player.IsExtTS && Usemoviecodects))
              {
                return new VideoPlayerVMR9(localType);
              }
              else
              {
                return new TSReaderPlayer(localType);
              }
            }
            else
            {
              return new TSReaderPlayer();
            }
          }

          if (!Util.Utils.IsAVStream(aFileName) && Util.Utils.IsVideo(aFileName) && localType != g_Player.MediaType.Music)
          {
            if (aMediaType != null)
            {
              return new VideoPlayerVMR9(localType);
            }
            else
            {
              return new VideoPlayerVMR9();
            }
          }

          if (Util.Utils.IsCDDA(aFileName))
          {
            // Check if, we should use BASS for CD Playback
            if ((AudioPlayer)Enum.Parse(typeof(AudioPlayer), strAudioPlayer) != AudioPlayer.DShow)
            {
              if (BassMusicPlayer.BassFreed)
              {
                BassMusicPlayer.Player.InitBass();
              }

              return BassMusicPlayer.Player;
            }
            else
            {
              return new AudioPlayerWMP9();
            }
          }

          if (Util.Utils.IsAudio(aFileName) || localType == g_Player.MediaType.Music)
          {
            if ((AudioPlayer)Enum.Parse(typeof(AudioPlayer), strAudioPlayer) != AudioPlayer.DShow)
            {
              if (BassMusicPlayer.BassFreed)
              {
                BassMusicPlayer.Player.InitBass();
              }

              return BassMusicPlayer.Player;
            }
            else if (String.Compare(strAudioPlayer, "Windows Media Player 9", true) == 0)
            {
              return new AudioPlayerWMP9();
            }
            else
            {
              return new AudioPlayerVMR7();
            }
          }

          // Use WMP Player as Default
          return new AudioPlayerWMP9();
        }
      }
      finally
      {
        Log.Debug("PlayerFactory: Successfully created player instance for file - {0}", aFileName);
      }
    }
示例#28
0
 private void OnPlayBackStopped(g_Player.MediaType type, int timeMovieStopped, string filename)
 {
   DoOnPlayBackStoppedOrChanged(type, timeMovieStopped, filename, "OnPlayBackStopped");
 }
示例#29
0
    private void OnPlayBackStopped(g_Player.MediaType type, int stoptime, string filename)
    {
      if (type != g_Player.MediaType.TV && type != g_Player.MediaType.Radio)
      {
        return;
      }

      StopPlayback();
      UpdateGUIonPlaybackStateChange(false);
    }
示例#30
0
    private void OnPlayBackEnded(g_Player.MediaType type, string filename)
    {
      if (type != g_Player.MediaType.Video)
      {
        return;
      }

      // BD-DVD image stop time (change to index.bdmv if mpls file is played)
      ISelectBDHandler selectBDHandler = GetSelectBDHandler();
      selectBDHandler.IsBDPlayList(ref filename);

      // Handle all movie files from idMovie
      ArrayList movies = new ArrayList();
      HashSet<string> watchedMovies = new HashSet<string>();

      int idMovie = VideoDatabase.GetMovieId(filename);

      if (idMovie >= 0)
      {
        VideoDatabase.GetFilesForMovie(idMovie, ref movies);

        for (int i = 0; i < movies.Count; i++)
        {
          string strFilePath = (string)movies[i];
          byte[] resumeData = null;
          int idFile = VideoDatabase.GetFileId(strFilePath);
          if (idFile < 0)
          {
            break;
          }
          // Set resumedata to zero
          VideoDatabase.GetMovieStopTimeAndResumeData(idFile, out resumeData, g_Player.SetResumeBDTitleState);
          VideoDatabase.SetMovieStopTimeAndResumeData(idFile, 0, resumeData, g_Player.SetResumeBDTitleState);
          watchedMovies.Add(strFilePath);
        }

        int playTimePercentage = 0;

        if (IsStacked && TotalMovieDuration != 0)
        {
          int duration = 0;

          for (int i = 0; i < StackedMovieFiles.Count; i++)
          {
            int fileID = VideoDatabase.GetFileId((string)StackedMovieFiles[i]);

            if (filename != (string)StackedMovieFiles[i])
            {
              duration += VideoDatabase.GetVideoDuration(fileID);
              continue;
            }
            playTimePercentage = (int)(100 * (duration + g_Player.Player.CurrentPosition) / TotalMovieDuration);
            break;
          }
        }
        else
        {
          playTimePercentage = 100;
        }

        IMDBMovie details = new IMDBMovie();
        VideoDatabase.GetMovieInfoById(idMovie, ref details);

        if (playTimePercentage >= _watchedPercentage)
        {
          details.Watched = 1;
          VideoDatabase.SetWatched(details);
          VideoDatabase.SetMovieWatchedStatus(idMovie, true, playTimePercentage);
          VideoDatabase.MovieWatchedCountIncrease(idMovie);
          // Set date watched
          VideoDatabase.SetDateWatched(details);
        }
        else
        {
          int percent = 0;
          int timesWatched = 0;
          bool wStatus = VideoDatabase.GetmovieWatchedStatus(idMovie, out percent, out timesWatched);
          VideoDatabase.SetMovieWatchedStatus(idMovie, wStatus, playTimePercentage);
        }
      }
    }