public void Start(double offsetTop, double offsetLeft, double width, double height, string location, string name) { VlcContext.StartupOptions.AddOption("--screen-top=" + offsetTop); VlcContext.StartupOptions.AddOption("--screen-left=" + offsetLeft); VlcContext.StartupOptions.AddOption("--screen-width=" + width); VlcContext.StartupOptions.AddOption("--screen-height=" + height); VlcContext.Initialize(); vlcLocationMedia = new LocationMedia("screen://"); vlcLocationMedia.AddOption(String.Format(vlcMediaOption, location + "\\" + name)); audioRecorder.Init(location + "\\" + name); durationWatch.Reset(); vlcControl = new VlcControl(); vlcControl.Media = vlcLocationMedia; vlcControl.Playing += (sender, args) => { durationWatch.Start(); audioRecorder.Play(); }; vlcControl.Stopped += (sender, args) => { durationWatch.Stop(); audioRecorder.Stop(); }; }
private void OnBtnPlayClick(object sender, RoutedEventArgs e) { if (string.IsNullOrEmpty(myTxtUrl.Text)) return; var media = new LocationMedia(myTxtUrl.Text); media.StateChanged += delegate(MediaBase sender2, VlcEventArgs<States> e2) { if (e2.Data == States.Ended && media.SubItems.Count > 0) { LocationMedia newMedia = media.SubItems[0]; //newMedia.AddOption(":file-caching=1000"); newMedia.ParsedChanged += delegate { myTxtTitle.Text = newMedia.Metadatas.Title; myTxtArtist.Text = newMedia.Metadatas.Artist; }; myVlcControl.Play(newMedia); } }; media.ParsedChanged += delegate { myTxtMRL.Text = media.MRL; }; myVlcControl.Play(media); }
private void OnLoaded(object sender, RoutedEventArgs e) { var vlcControl = new VlcControl(); var rstpAddress = "rtsp://" + Address + "/snl/live/1/1/"; var locationMedia = new LocationMedia(rstpAddress); vlcControl.Media = locationMedia; _windowsFormsHost.Child = vlcControl; }
private void OnVlcEvent(ref LibVlcEventArgs eventData, IntPtr userData) { switch (eventData.Type) { case EventTypes.MediaDurationChanged: EventsHelper.RaiseEvent(DurationChanged, this, new VlcEventArgs <long>(eventData.MediaDurationChanged.NewDuration)); break; case EventTypes.MediaFreed: EventsHelper.RaiseEvent(Freed, this, new VlcEventArgs <EventArgs>(EventArgs.Empty)); break; case EventTypes.MediaMetaChanged: EventsHelper.RaiseEvent(MetaChanged, this, new VlcEventArgs <Metadatas>(eventData.MediaMetaChanged.MetaType)); break; case EventTypes.MediaParsedChanged: EventsHelper.RaiseEvent(ParsedChanged, this, new VlcEventArgs <int>(eventData.MediaParsedChanged.NewStatus)); break; case EventTypes.MediaStateChanged: EventsHelper.RaiseEvent(StateChanged, this, new VlcEventArgs <States>(eventData.MediaStateChanged.NewState)); break; //TODO case EventTypes.MediaSubItemAdded: MediaBase media; if (this is LocationMedia) { media = new LocationMedia(eventData.MediaSubitemAdded.NewChild); } else { media = new PathMedia(eventData.MediaSubitemAdded.NewChild); } EventsHelper.RaiseEvent(MediaSubItemAdded, this, new VlcEventArgs <MediaBase>(media)); break; } }
private void OnVlcEvent(ref LibVlcEventArgs eventData, IntPtr userData) { switch (eventData.Type) { case EventTypes.MediaDurationChanged: EventsHelper.RaiseEvent(DurationChanged, this, new VlcEventArgs<long>(eventData.MediaDurationChanged.NewDuration)); break; case EventTypes.MediaFreed: EventsHelper.RaiseEvent(Freed, this, new VlcEventArgs<EventArgs>(EventArgs.Empty)); break; case EventTypes.MediaMetaChanged: EventsHelper.RaiseEvent(MetaChanged, this, new VlcEventArgs<Metadatas>(eventData.MediaMetaChanged.MetaType)); break; case EventTypes.MediaParsedChanged: EventsHelper.RaiseEvent(ParsedChanged, this, new VlcEventArgs<int>(eventData.MediaParsedChanged.NewStatus)); break; case EventTypes.MediaStateChanged: EventsHelper.RaiseEvent(StateChanged, this, new VlcEventArgs<States>(eventData.MediaStateChanged.NewState)); break; //TODO case EventTypes.MediaSubItemAdded: MediaBase media; if (this is LocationMedia) media = new LocationMedia(eventData.MediaSubitemAdded.NewChild); else media = new PathMedia(eventData.MediaSubitemAdded.NewChild); EventsHelper.RaiseEvent(MediaSubItemAdded, this, new VlcEventArgs<MediaBase>(media)); break; } }
private void OnMediaStateChange(MediaBase sender, Vlc.DotNet.Core.VlcEventArgs<Vlc.DotNet.Core.Interops.Signatures.LibVlc.Media.States> e) { if (e.Data == Vlc.DotNet.Core.Interops.Signatures.LibVlc.Media.States.Playing) { if (!initialized) { if (media.Duration.TotalMilliseconds > 0) { if (!Autoplay) vlc.Pause(); else rect.Visibility = System.Windows.Visibility.Hidden; durationMilliseconds = (float)media.Duration.TotalMilliseconds; initialized = true; OnMediaLoaded(); } else if (media.SubItems.Count > 0) { var subItems = media.SubItems; media.StateChanged -= OnMediaStateChange; subItems[0].StateChanged += OnMediaStateChange; media = subItems[0]; vlc.Media = subItems[0]; vlc.Play(); } else { OnMediaFailed(); } } } }
public override void Load(Uri uri) { media = new LocationMedia(uri.AbsoluteUri); if (uri.Scheme == "dshow") { var nvc = uri.ParseQueryString(); foreach (var key in nvc.AllKeys) { media.AddOption(key + "=" + nvc[key]); } } media.StateChanged += OnMediaStateChange; bool doLoop = false; vlc.EncounteredError += (sender, args) => { OnMediaFailed(); }; vlc.EndReached += (sender, args) => { if (!loop) { Stop(); OnPlaybackEnded(); } else { doLoop = true; } }; vlc.Playing += (sender, args) => { if (loop && doLoop) { OnSeekStart(); } doLoop = false; }; vlc.Media = media; }
private void ButtonPlayYoutubeSample(object sender, RoutedEventArgs e) { var media = new LocationMedia(@"http://www.youtube.com/watch?v=WAjt5wPJVqM"); media.StateChanged += delegate(MediaBase s, VlcEventArgs<States> args) { if (args.Data == States.Ended) { var subItems = media.SubItems; if (subItems.Count > 0) { myVlcControl.Play(subItems[0]); } } }; myVlcControl.PlaybackMode = PlaybackModes.Loop; myVlcControl.Play(); }