Example #1
0
        public WMPlayer(ILogger Logger_)
        {

            axWindowsMediaPlayer = new AxWMPLib.AxWindowsMediaPlayer();

            Logger = Logger_;

            ((System.ComponentModel.ISupportInitialize)(axWindowsMediaPlayer)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(axWindowsMediaPlayer)).EndInit();

            PreviousPosition = 0;
            ClearTargetPosition();
            TargetSoundTrack = null;
            timer = new System.Timers.Timer(20);
            timer.Enabled = true;
            timer.Elapsed += timer_Elapsed;
            timer.AutoReset = false;
            timer.Start();

            TargetURL = "";
            TargetPosition_ = 0;
        }
Example #2
0
        private static void AnalizeTrackEntry(EbmlReader ebmlReader, MatroskaElementDescriptorProvider medp, ResultOfParsingMKV resPars, StringBuilder sb, string GroupName = "", string add = "")
        {
            ulong TrackNumber = 0;
            ulong TrackUID = 0;
            ulong TrackType = 0;
            ulong FlagDefault = 0;
            ulong FlagLacing = 0;
            string CodecID = "";
            string Name = "";
            ulong  DefaultDuration = 0;
            string Language = "";
            
            ebmlReader.EnterContainer();
            while (ebmlReader.ReadNext())
            {
                var descriptor = medp.GetElementDescriptor(ebmlReader.ElementId);
                if (descriptor == null)
                {
                    sb.Append(add + "undefined \r\n");
                    continue;
                }
                string dName = descriptor.Name;
                sb.Append(add + dName);

                switch (descriptor.Type)
                {
                    case ElementType.MasterElement:
                        sb.Append("\r\n");
                        //ReadContainer(ebmlReader, medp, dicSub, CurrentClusterTimeCode, sb, descriptor.Name, add + "    ");
                        break;
                    case ElementType.AsciiString:
                        string strVal = ebmlReader.ReadAscii();
                        if(dName == "CodecID") CodecID = strVal; 
                        if (dName == "Language") Language = strVal; 
                        sb.Append(" = " + strVal);
                        break;
                    case ElementType.Binary:
                        break;
                    case ElementType.Date:
                        sb.Append(" = " + ebmlReader.ReadDate());
                        break;
                    case ElementType.Float:
                        double flVal = ebmlReader.ReadFloat();
                        sb.Append(" = " + flVal);
                        break;
                    case ElementType.None:
                        sb.Append(" (none)");
                        break;
                    case ElementType.SignedInteger:
                        sb.Append(" = " + ebmlReader.ReadInt());
                        break;
                    case ElementType.UnsignedInteger:
                        ulong ulVal = ebmlReader.ReadUInt();
                        if(dName == "TrackNumber") TrackNumber = ulVal;
                        if(dName == "TrackType") TrackType = ulVal;
                        if(dName == "FlagDefault") FlagDefault = ulVal;
                        if(dName == "FlagLacing ") FlagLacing = ulVal;
                        if(dName == "DefaultDuration") DefaultDuration = ulVal;
                        if (dName == "TrackUID") TrackUID = ulVal;
                        sb.Append(" = " + ulVal);
                        break;
                    case ElementType.Utf8String:
                        string utfStr = ebmlReader.ReadUtf();
                        if (dName == "Name") Name = utfStr;
                        sb.Append(" = " + utfStr);
                        break;
                }
                sb.Append("\r\n");
            }
            ebmlReader.LeaveContainer();
            
            // If it's subtitles track
            if (TrackType == 17) { 
                Subtitles sub = new Subtitles();
                sub.Items = new SynchronizedObservableCollection<SubtitleItem>();
                sub.Language = Language.Length == 0 ? "eng" : Language;
                sub.Type = Name;
                sub.Format = CodecID;
                sub.TrackUID = TrackUID;

                resPars.dicSub.Add(Convert.ToInt16(TrackNumber),sub);
            }

            // If it's subtitles track
            if (TrackType == 2)
            {
                AudioTrack aud = new AudioTrack();
                aud.Language = Language.Length == 0 ? "eng" : Language;
                aud.CodecID = CodecID;
                aud.Number = resPars.AudioTracks.Count + 1;

                resPars.AudioTracks.Add(aud);
            }

        }
Example #3
0
        public void SetAudioTrack(AudioTrack track)
        {
            Logger.Trace("Player set audio track");

            if (track == null) return;

            if(axWindowsMediaPlayer.OcxState == null)
            {
                TargetSoundTrack = track;
                return;
            }
            if (!IsPlaying)
            {
                TargetSoundTrack = track;
                return;
            }

            if (track.Number != 0)
            {
                try
                {
                    WMPLib.IWMPControls3 iface = ((WMPLib.IWMPControls3)(((IWMPControls3)axWindowsMediaPlayer.Ctlcontrols)));
                    iface.currentAudioLanguageIndex = track.Number;
                }
                catch {
                    TargetSoundTrack = track;
                    return;
                }
            }
        }
Example #4
0
        private void timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            // if the OCX is destroyed
            try { var lcPz = Position; } catch { return; }

            if (TargetURL != "")
            {
                if(axWindowsMediaPlayer.OcxState != null)
                {
                    string lcURL = TargetURL;
                    TargetURL = "";
                    Open(lcURL);
                } else
                {
                    timer.Start();
                    return;
                }
            }
            if (TargetPlay)
            {
                Play();
                TargetPlay = false;
            }
            if (TargetPosition_ != 0)
            {
                if (axWindowsMediaPlayer.OcxState != null)
                {
                    Position = TargetPosition_;
                    TargetPosition_ = 0;
                }
                else
                {
                    timer.Start();
                    return;
                }
            }

            if (TargetSoundTrack != null && IsPlaying)
            {
                SetAudioTrack(TargetSoundTrack);
                TargetSoundTrack = null;
            }

            if (PreviousPosition != Position)
            {
                RaiseOnPositionChange();
                PreviousPosition = Position;
                    
                OnChangePosition(Position);
                    
            }
            timer.Start();
        }