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; }
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); } }
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; } } }
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(); }