Example #1
0
 public Player()
 {
     InitializeComponent();
     vlc1.playlist.stop(); // to generate error InvalidCastException on bad VLC version on grid creation
     vlc1Status    = VlcStatus.Preparing;
     lostRtspRetry = 0;
 }
Example #2
0
 private void PrivateStop()
 {
     lostTimer.Enabled = false;
     vlcH = 0;
     vlcW = 0;
     vlc1.playlist.stop();
     isSoundPresent = false;
     vlc1Status     = VlcStatus.Stopped;
 }
Example #3
0
        private VlcMonitor(Label statusLabel, ShutdauwnForm shutdawunForm)
        {
            this.monitorRunning = true;
            this.statusLabel    = statusLabel;
            this.vlcStatus      = VlcStatus.MediaStopped;
            VlcMonitor.instance = this;
            this.shutdawunForm  = shutdawunForm;

            this.monitorVlc(statusLabel);
        }
Example #4
0
        private VlcMonitor(Label statusLabel, ShutdauwnForm shutdawunForm)
        {
            this.monitorRunning = true;
            this.statusLabel = statusLabel;
            this.vlcStatus = VlcStatus.MediaStopped;
            VlcMonitor.instance = this;
            this.shutdawunForm = shutdawunForm;

            this.monitorVlc(statusLabel);
        }
Example #5
0
        /// <summary>
        /// Send a the command to the VLC media player.
        /// </summary>
        /// <param name="query">The query to send. If a null query is provided, just an updated status
        /// will be requested.</param>
        private async Task SendCommand(string query = null)
        {
            HttpResponseMessage response = null;

            try
            {
                response = await client.GetAsync("requests/status.xml" + (query == null ? "" : "?" + query));
            }
            catch (HttpRequestException)
            {
                IsConnected = false;
                ConnectionChanged?.Invoke(this, new EventArgs());
                return;
            }

            IsConnected = true;

            if (response.IsSuccessStatusCode)
            {
                var stream = await response.Content.ReadAsStreamAsync();

                try
                {
                    Status = (VlcStatus)statusSerializer.Deserialize(stream);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }

                StatusUpdated?.Invoke(this, new EventArgs());
            }
            else if (response.StatusCode == HttpStatusCode.Unauthorized)
            {
                IsConnected = false;
                ConnectionChanged?.Invoke(this, new EventArgs());
            }
            else
            {
                Console.WriteLine("error: " + response.StatusCode);
            }
        }
Example #6
0
        /// <summary>
        /// Set the current state of the VLC monitoring, and change the visual status to an appropiate decsription
        /// </summary>
        /// <param name="newVlcStatus"></param>
        private void setStatus(VlcStatus newVlcStatus)
        {
            if (newVlcStatus == this.vlcStatus)
            {
                return;
            }

            this.vlcStatus = newVlcStatus;

            string status;

            switch (newVlcStatus)
            {
            case VlcStatus.MediaStopped:
                status = "Media stopped, shutting down";
                break;

            case VlcStatus.Idle:
                status = "VLC is idle";
                break;

            case VlcStatus.MediaStarted:
                status = "Media started";
                break;

            case VlcStatus.MediaPlaying:
                status = "Media is playing";
                break;

            case VlcStatus.NotFound:
                status = "VLC process not found";
                break;

            default:
                status = "Unknown VLC event";
                break;
            }

            VlcMonitor.setStatus(this.statusLabel, status);
        }
Example #7
0
 private void Vlc1PositionChanged()
 {
     lostTimer.Enabled = false;
     lostTimer.Enabled = true;
     if (vlc1Status == VlcStatus.Buffering)
     {
         PosChangedTimes++;
         vlc1.audio.volume = this.volume; // important for user movies
         if (PosChangedTimes == 10)       //>7,<~10
         {
             vlc1Status = VlcStatus.Playing;
             Invoke(Playing);
             lostTimer.Interval = lostRtspTimer;
             if (lostRtspRetry >= lostRtspRetryAlert)
             {
                 Invoke(LostStreamRestored);
             }
             lostRtspRetry = 0;
         }
     }
     else if (vlcH <= 0)
     {
         if (vlc1.video.height > 0)
         {
             vlcH = vlc1.video.height;
             vlcW = vlc1.video.width;
             Invoke(SizeDetected);
         }
         else
         {
             vlcH -= 1;
             if (vlcH < -5)
             {
                 vlcH = 576; vlcW = 704; Invoke(SizeDetected);
             }
         }
     }
 }
Example #8
0
 public bool Play()
 {
     if (vlc1Status == VlcStatus.Stopped && vlc1.playlist.items.count > 0)
     {
         vlc1Status         = VlcStatus.Buffering;
         PosChangedTimes    = 0;
         lostTimer.Interval = lostRtspOnStartTimer;
         lostTimer.Enabled  = true;
         vlc1.playlist.play();
         vlc1.audio.volume = this.volume; // important for user movies
         Invoke(Buffering);
         // to disable ghosts:
         //To switch VLC from HTTP streaming to RTP/RTSP streaming:
         //
         //On the VLC media player Tools menu, click Preferences.
         //In the Simple Preferences dialog box, click Input / Codecs in the contents panel.
         //In Input & Codecs Settings, in the Network area, change the Live555 stream transport option from HTTP (default) to RTP over RTSP (TCP).
         //Click Save.
         //
         // --rtsp-tcp
         return(true);
     }
     return(false);
 }
Example #9
0
        private static VlcStatus ParseStatus(string xmlString)
        {
            var status = new VlcStatus();

            XmlDocument doc = new XmlDocument();

            doc.LoadXml(xmlString);

            foreach (XmlNode parent in doc.ChildNodes)
            {
                if (parent.Name == "root")
                {
                    foreach (XmlNode node in parent.ChildNodes)
                    {
                        int parseInt = -1;
                        switch (node.Name.ToLowerInvariant())
                        {
                        case "apiversion":
                            if (int.TryParse(node.InnerText, out parseInt))
                            {
                                status.ApiVersion = parseInt;
                            }
                            break;

                        case "time":
                            if (int.TryParse(node.InnerText, out parseInt))
                            {
                                status.Time = parseInt;
                            }
                            break;

                        case "volume":
                            if (int.TryParse(node.InnerText, out parseInt))
                            {
                                status.Volume = parseInt;
                            }
                            break;

                        case "length":
                            if (int.TryParse(node.InnerText, out parseInt))
                            {
                                status.Length = parseInt;
                            }
                            break;

                        case "state":
                            status.State = ParseState(node.InnerText);
                            break;

                        case "version":
                            status.Version = node.InnerText;
                            break;

                        case "position":
                            if (double.TryParse(node.InnerText, out double parseDouble))
                            {
                                status.Position = parseDouble;
                            }
                            break;

                        case "information":
                            status.FileInfo = ParseFileInformation(node);
                            break;

                        default:
                            break;
                        }
                    }
                }
            }

            return(status);
        }
        public async Task <VlcStatus> GetStatus()
        {
            PostSubmitter ps  = GetSubmiter(baseUrl + "requests/status.xml");
            var           res = await ps.PostAsync();

            XDocument doc = XDocument.Parse(res);
            //doc.LoadXml(res);
            VlcStatus result = new VlcStatus();
            var       fs     = XmlHelper.SelectElement(doc.Root, "fullscreen");

            if (fs != null)
            {
                if (fs.Value == "0")
                {
                    result.IsFullScreen = false;
                }
                else
                {
                    result.IsFullScreen = Convert.ToBoolean(fs.Value);
                }
            }
            result.AudioDelay = Convert.ToDouble(XmlHelper.SelectElement(doc.Root, "audiodelay").Value);
            result.SubsDelay  = Convert.ToDouble(XmlHelper.SelectElement(doc.Root, "subtitledelay").Value);
            var state = XmlHelper.SelectElement(doc.Root, "state").Value.Trim();

            switch (state)
            {
            case "paused":
                result.State = VlcState.Paused;
                break;

            case "playing":
                result.State = VlcState.Playing;
                break;

            default:
                result.State = VlcState.Stopped;
                break;
            }
            result.VlcVersion      = XmlHelper.SelectElement(doc.Root, "version").Value.Trim();
            result.Duration        = TimeSpan.FromSeconds(Convert.ToInt32(XmlHelper.SelectElement(doc.Root, "length").Value));
            result.CurrentPossiton = TimeSpan.FromSeconds(Convert.ToInt32(XmlHelper.SelectElement(doc.Root, "time").Value));
            var infos = XmlHelper.SelectElements(doc.Root, "information/category");

            foreach (var item in infos)
            {
                var name = item.Attribute("name").Value;
                if (name == "meta")
                {
                    var serie = XmlHelper.GetNodeByNameAttribute(item, "info", "name", "showName");
                    if (serie != null)
                    {
                        var titre = XmlHelper.GetNodeByNameAttribute(item, "info", "name", "title");
                        if (titre != null)
                        {
                            result.CurrentllyPlaying = titre.Value.Trim();
                        }
                        else
                        {
                            result.CurrentllyPlaying = serie.Value.Trim();
                        }
                    }
                    else
                    {
                        var fname = XmlHelper.GetNodeByNameAttribute(item, "info", "name", "filename");
                        if (fname != null)
                        {
                            result.CurrentllyPlaying = fname.Value.Trim();
                        }
                        else
                        {
                            result.CurrentllyPlaying = "";
                        }
                    }
                }
                if (name.IndexOf(' ') > 0)
                {
                    //FLUUUUUUXUX
                    VlcFlux flux = new VlcFlux();
                    flux.Id = int.Parse(name.Split(' ')[1]);
                    for (int i = 0; i < typeNameLoc.Length; i++)
                    {
                        var typeNode = XmlHelper.GetNodeByNameAttribute(item, "info", "name", typeNameLoc[i]);
                        if (typeNode != null)
                        {
                            var typeText = typeNode.Value.Trim();
                            if (typeNameAudioLoc.Contains(typeText))
                            {
                                flux.FluxType = FluxType.Audio;
                                break;
                            }
                            else if (typeNameSubsLoc.Contains(typeText))
                            {
                                flux.FluxType = FluxType.SubTitles;
                                break;
                            }
                            else if (typeNameVidLoc.Contains(typeText))
                            {
                                flux.FluxType = FluxType.Video;
                                break;
                            }
                        }
                    }
                    result.Fluxs.Add(flux);
                    flux.Name = "Stream " + (from r in result.Fluxs where r.FluxType == flux.FluxType select r).Count();
                }
            }

            return(result);
        }
Example #11
0
        /// <summary>
        /// Set the current state of the VLC monitoring, and change the visual status to an appropiate decsription
        /// </summary>
        /// <param name="newVlcStatus"></param>
        private void setStatus(VlcStatus newVlcStatus)
        {
            if (newVlcStatus == this.vlcStatus)
            {
                return;
            }

            this.vlcStatus = newVlcStatus;

            string status;
            switch (newVlcStatus)
            {
                case VlcStatus.MediaStopped:
                    status = "Media stopped, shutting down";
                    break;
                case VlcStatus.Idle:
                    status = "VLC is idle";
                    break;
                case VlcStatus.MediaStarted:
                    status = "Media started";
                    break;
                case VlcStatus.MediaPlaying:
                    status = "Media is playing";
                    break;
                case VlcStatus.NotFound:
                    status = "VLC process not found";
                    break;
                default:
                    status = "Unknown VLC event";
                    break;
            }

            VlcMonitor.setStatus(this.statusLabel, status);
        }
Example #12
0
        private void ClientOnStatusUpdated(object sender, VlcStatus vlcStatus)
        {
            var time = new TimeSpan(0, 0, 0, vlcStatus.Time);

            Task.Factory.StartNew(() =>
            {
                var currentLeaf = GetCurrentLeaf().Result;
                if (currentLeaf != null)
                {
                    RunOnUiThread(() => TimeTextView2.Text = TimeSpan.FromSeconds(currentLeaf.Duration).ToString());
                }
                else
                {
                    RunOnUiThread(() => TimeTextView2.SetText(Resource.String.app_unknown_duration));
                }
            });

            RunOnUiThread(() =>
            {
                TimeTextView.Text = time.ToString();

                var value = (int)Math.Round((decimal)(125.0 * vlcStatus.Volume / 320.0));

                if (CanProgressBeSet)
                {
                    VolumeSeekbar.SetProgress(value, true);
                }

                string title;
                try
                {
                    title = Path.GetFileNameWithoutExtension(vlcStatus.Information.Category.First().Info
                                                             .First(i => i.Name == "filename").Text);
                }
                catch
                {
                    try
                    {
                        title = Path.GetFileNameWithoutExtension(vlcStatus.Information.Category.First().Info
                                                                 .First(i => i.Name == "name").Text);
                    }
                    catch
                    {
                        title = "";
                    }
                }

                if (title != "")
                {
                    TitleTextView.Text = title;
                }
                else
                {
                    TitleTextView.SetText(Resource.String.app_unknown_title);
                }

                if (vlcStatus.State == VlcPlaybackState.Playing)
                {
                    if (PlayPauseButton.State != MorphButton.MorphState.Start)
                    {
                        PlayPauseButton.SetState(MorphButton.MorphState.Start, true);
                    }
                }
                else
                {
                    if (PlayPauseButton.State != MorphButton.MorphState.End)
                    {
                        PlayPauseButton.SetState(MorphButton.MorphState.End, true);
                    }
                }
            });
        }