none
Service Windows MediaPlayer RRS feed

  • Вопрос

  • Встала необходимость в автономном воспроизведении Видео. Задумка такова: Считывание информации из XML, и воспроизведение по времени. Все устанавливаетьс, но видео не воспроизводит, в чем может быть дело???


    namespace MyService
    {
        
        public partial class Service1 : ServiceBase
        {
            public static readonly ILog log = LogManager.GetLogger(typeof(Service1));

            public class ScheduleViewModel
            {
                public string FileName { get; set; }

                public int StartHours { get; set; }

                public int StartMinutes { get; set; }

                public int EndHours { get; set; }

                public int EndMinutes { get; set; }

                public bool Repeat { get; set; }

                public bool Mute { get; set; }
            }
            public IWMPSettings settings { get; set; }
            public IWMPControls controls { get; set; }
            public System.String URL { get; set; }

            public Service1()
            {
                InitializeComponent();
            }

            //AxWMPLib.AxWindowsMediaPlayer Player1 = new AxWMPLib.AxWindowsMediaPlayer(); 
            
            //WindowsMediaPlayer axWindowsMediaPlayer1 = new WindowsMediaPlayer();
            //AxWindowsMediaPlayer axWindowsMediaPlayer1 = new AxWindowsMediaPlayer();
            WMPLib.WindowsMediaPlayer Player = new WMPLib.WindowsMediaPlayer();
            string path = System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Documents\\test.xml";
            Timer timer1 = new Timer();

            protected override void OnStart(string[] args)
            {
                Timers();
            }

            protected override void OnStop()
            {
                qwer();
            }
            public void Timers()
            {
                timer1.Interval = 60000;// 1 минута
                timer1.Enabled = true;
                timer1.Start();
                timer1.Elapsed += new ElapsedEventHandler(OnTimedEvent);
                log.Info(timer1);
                log.Debug(timer1);
                log.Error(timer1);
                
            }
            public void qwer()
            {
                Player.controls.stop();
                timer1.Close();
            }

            private void OnTimedEvent(object source, ElapsedEventArgs e)
            {
                var path = System.Environment.GetEnvironmentVariable("USERPROFILE") + "\\Desktop\\test.xml";
                var newList = DeSerializeObject<List<ScheduleViewModel>>(path);
                if (newList == null)
                    newList = NewList();

                log.Debug(newList);
                log.Info(newList);
                log.Error(newList);
                log.Debug(Player); log.Error(Player);
                foreach (var item in newList)
                {
                    DateTime startdate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, item.StartHours, item.StartMinutes, 0);
                    DateTime enddate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, item.EndHours, item.EndMinutes, 0);
                    if (DateTime.Now >= startdate && DateTime.Now <= enddate)
                    {
                        //Player.openPlayer(item.FileName); log.Debug(item.FileName); log.Error(item.FileName);
                        //Player.settings.volume = 75;
                        //Player.controls.play();
                        if (item.Repeat == true)
                        {
                        Player.openPlayer(item.FileName); log.Debug(item.FileName);
                            if (item.Mute == false) { Player.settings.volume = 0; Player.controls.play(); Player.settings.setMode("loop", true); log.Debug(Player); log.Info(Player); }
                            else Player.settings.volume = 75;
                            Player.controls.play();
                            Player.settings.setMode("loop", true); log.Debug(Player); log.Info(Player);
                        }

                        else Player.openPlayer(item.FileName);;
                         if (item.Mute == false) { Player.settings.volume = 0; Player.controls.play(); Player.settings.setMode("loop", false); log.Debug(Player); log.Info(Player); }
                         else Player.settings.volume = 75;
                         Player.controls.play(); log.Debug(Player); log.Info(Player);
                         Player.settings.setMode("loop", false);
                    }
                }
                
            }

            public List<ScheduleViewModel> NewList()
            {
                return new List<ScheduleViewModel>
                     {
                           new ScheduleViewModel{FileName="C:\\Video\\abc.avi", StartHours=8, StartMinutes=0, EndHours=8, EndMinutes=15, Repeat=true}, 
                           new ScheduleViewModel{FileName="C:\\Video\\qwe.avi", StartHours=8, StartMinutes=15, EndHours=9, EndMinutes=45, Repeat=true},
                           new ScheduleViewModel{FileName="C:\\Video\\abc.avi", StartHours=9, StartMinutes=45, EndHours=9, EndMinutes=55, Repeat=true},
                           new ScheduleViewModel{FileName="C:\\Video\\asd.avi", StartHours=9, StartMinutes=55, EndHours=11, EndMinutes=15, Repeat=true}
                           };
            }
            public T DeSerializeObject<T>(string fileName)
            {
                if (string.IsNullOrEmpty(fileName)) { return default(T); }
                T objectOut = default(T);
                try
                {
                    string attributeXml = string.Empty;
                    XmlDocument xmlDocument = new XmlDocument();
                    xmlDocument.Load(fileName);
                    string xmlString = xmlDocument.OuterXml;

                    using (StringReader read = new StringReader(xmlString))
                    {
                        Type outType = typeof(T);
                        XmlSerializer serializer = new XmlSerializer(outType);
                        using (XmlReader reader = new XmlTextReader(read))
                        {
                            objectOut = (T)serializer.Deserialize(reader);
                            reader.Close();
                        }
                        read.Close();
                    }
                }
                catch (Exception ex)
                {
                    //Log exception here
                }

                return objectOut;
            }
        }
        /*
         * 1) Чтение расписания
         * 2) Проверить текущее время и взять ролик из расписания
         * 3) Если играется не тото ролик - запустить нужный, иначе - ничего не делать.
         * 4) Установить параметры воспроизведения согласно расписания.
         */
    }

Ответы

Все ответы

  • Вы пробовали воспроизвести видео по-простому, без таймера, без парсинга xml, без всяких условий?

    У вас в коде много логирования. В логах есть что-нибудь по теме?

    ---

    Теперь замечания по коду. Воспользуйтесь какими-нибудь средствами статического анализа. Какая у вас Студия (год, версия)? Возможно, в ней уже есть такие средства. Можно добавить другие. В коде очень плохой стиль, ужасный нейминг. Анализатор всё это покажет (и предложит способы исправления).

    Метод DeSerializeObject можно сильно упростить. Незачем сперва считывать файл в XmlDocument, потом преобразовывать в строку, после чего парсить её сериализатором. Можно намного проще:

    public T DeSerializeObject<T>(string fileName)
    {
        if (string.IsNullOrEmpty(fileName))
            return default(T);
    
        T objectOut = default(T);
    
        try
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            using (XmlReader reader = XmlReader.Create(fileName))
            {
                objectOut = (T)serializer.Deserialize(reader);
            }
        }
        catch (Exception ex)
        {
            //Log exception here
        }
    
        return objectOut;
    }

  • В логах ничего нет.Пробовал, запускать без всего, звук идет, видео нет. Пользуюсь Studj 2013 Pro 
  • Возможно, у вас в системе нет нужного кодека.

    Обычным плеером это видео воспроизводится?

  • да, перенес код на форму, все работает