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); }
/// <summary> /// 流媒体播放器开始播放 /// </summary> /// <param name="uri">播放地址</param> public void Play(string uri) { try { if (vlcPlayer != null) { //设置播放地址 LocationMedia media = new LocationMedia(uri); //PathMedia media = new PathMedia(uri); //播放 vlcPlayer.Play(media); } //if (this.vlcPlayer == null) //{ // string pluginPath = System.Environment.CurrentDirectory + "\\plugins\\"; // this.vlcPlayer = new VlcPlayer(pluginPath); //} //this.vlcPlayer.PlayFile(uri); } catch (Exception ex) { LogManage.WriteLog(this.GetType(), ex); } finally { } }
public void Play(LocationMedia media) { if (MyVlcControl.Media != null) { MyVlcControl.Media.StateChanged -= new VlcEventHandler <MediaBase, Vlc.DotNet.Core.Interops.Signatures.LibVlc.Media.States>(media_StateChanged); MyVlcControl.Media.DurationChanged -= new VlcEventHandler <MediaBase, long>(Media_DurationChanged); MyVlcControl.Media.Dispose(); } MyVlcControl.Media = media; MyVlcControl.Media.StateChanged += new VlcEventHandler <MediaBase, Vlc.DotNet.Core.Interops.Signatures.LibVlc.Media.States>(media_StateChanged); MyVlcControl.Media.DurationChanged += new VlcEventHandler <MediaBase, long>(Media_DurationChanged); MyVlcControl.Play(media); IsPlaying = true; }
private void PlayMedia(Code.Media.MediaData m) { if (m.LocalFile != null) { PathMedia media = new PathMedia(m.LocalFile.FullName); media.ParsedChanged += MediaOnParsedChanged; myVlcControl.Media = media; myVlcControl.Position = this.Position; } else { LocationMedia media = m.LocationMedia; media.ParsedChanged += MediaOnParsedChanged; myVlcControl.Media = media; } myVlcControl.Play(); }
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(); }
/// <summary> /// 流媒体播放器开始播放 /// </summary> /// <param name="uri">播放地址</param> public void Play(string uri) { try { if (this.vlcPlayer != null) { //设置播放地址 LocationMedia media = new LocationMedia(uri); //播放 this.vlcPlayer.Play(media); } } catch (Exception ex) { LogManage.WriteLog(this.GetType(), ex); } finally { } }
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(); } } } }
/**************************************************************************************************************************/ /// <summary> /// <para>gets a list of media objects from a given location</para> /// </summary> /// <param name="LocationId"></param> /// <param name="Parameters"></param> /// <returns></returns> public LocationMedia GetLocationRecentMedia(String LocationId, GetLocationRecentMediaParameters Parameters) { LocationMedia Media = null; try { // SET UP REQUEST URI UriBuilder BaseUri = new UriBuilder(); BaseUri.Scheme = Config.GetUriScheme(); BaseUri.Host = Config.GetApiUriString(); BaseUri.Host += "/locations/" + LocationId + "/media/recent"; // SET UP QUERY STRING NameValueCollection QueryString = System.Web.HttpUtility.ParseQueryString(String.Empty); QueryString.Add("access_token", AuthorisedUser.AccessToken); QueryString.Add("min_timestamp", Parameters.MinTimeStamp); QueryString.Add("max_timestamp", Parameters.MaxTimeStamp); QueryString.Add("min_id", Parameters.MinId); QueryString.Add("max_id", Parameters.MaxId); // SET THE QUERY STRINGS BaseUri.Query = QueryString.ToString(); // CREATE NEW FEEDS OBJECT AND FILL IN DATA Media = new LocationMedia(); // SEND REQUEST WebClient Client = new WebClient(); byte[] ResponseData = Client.DownloadData(BaseUri.Uri); String Response = Encoding.UTF8.GetString(ResponseData); // PARSE JSON dynamic ParsedJson = JsonConvert.DeserializeObject(Response); // CREATE META OBJECT MetaData Meta = new MetaData(); Meta.Code = ParsedJson.meta.code; Media.Meta = Meta; // CREATE PAGINATION OBJECT PaginationIdData Pagination = new PaginationIdData(); Pagination.NextUrl = ParsedJson.pagination.next_url; Pagination.NextMaxId = ParsedJson.pagination.next_max_id; Media.Pagination = Pagination; // SET DATA Media.Data = ParseFeeds(ParsedJson); } catch (WebException WEx) { // FETCHES ANY ERROR THROWN BY INSTAGRAM API Stream ResponseStream = WEx.Response.GetResponseStream(); if (ResponseStream != null) { StreamReader ResponseReader = new StreamReader(ResponseStream); if (ResponseReader != null) { // PARSE JSON dynamic ParsedJson = JsonConvert.DeserializeObject(ResponseReader.ReadToEnd()); // CREATE NEW META OBJECT AND FILL IN DATA MetaData Meta = new MetaData(); Meta.Code = ParsedJson.meta.code; Meta.ErrorType = ParsedJson.meta.error_type; Meta.ErrorMessage = ParsedJson.meta.error_message; Media.Meta = Meta; } } } catch (Exception Ex) { Console.WriteLine(Ex.StackTrace); } return(Media); }
protected override async void OnStartup(StartupEventArgs e) { base.OnStartup(e); try { if (e.Args.Length == 0) { Shutdown(); return; } //MessageBox.Show("edw"); var source = new TaskCompletionSource <object>(); var handleSource = new TaskCompletionSource <object>(); bool exited = false; client = new TcpProcessInteropClient(int.Parse(e.Args[0])); client.Register("initialize", payload => { //MessageBox.Show("init"); if (exited) { return(null); } source = new TaskCompletionSource <object>(); var path = payload[0].ToString(); _arguments = payload[1].ToString().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); bool init = false; if (!File.Exists(Path.Combine(path, "libvlc.dll"))) { Current.Shutdown(); return(null); } var pluginsPath = Path.Combine(path, "plugins"); VlcContext.LibVlcDllsPath = path; VlcContext.LibVlcPluginsPath = pluginsPath; VlcContext.StartupOptions.IgnoreConfig = true; VlcContext.StartupOptions.LogOptions.LogInFile = false; VlcContext.StartupOptions.LogOptions.ShowLoggerConsole = false; VlcContext.StartupOptions.LogOptions.Verbosity = VlcLogVerbosities.None; VlcContext.StartupOptions.AddOption("--input-timeshift-granularity=0"); VlcContext.StartupOptions.AddOption("--auto-preparse"); VlcContext.StartupOptions.AddOption("--album-art=0"); //VlcContext.StartupOptions.AddOption("--overlay=1"); //VlcContext.StartupOptions.AddOption("--deinterlace=-1"); //VlcContext.StartupOptions.AddOption("--network-caching=1500"); foreach (var arg in _arguments) { try { //MessageBox.Show(arg); VlcContext.StartupOptions.AddOption(arg.ToString()); } catch { } } try { VlcContext.Initialize(); init = true; } catch (Exception) { //MessageBox.Show(ex.Message); Application.Current.Shutdown(); } source.SetResult(null); return(init ? new object[] { } : null); }); client.Register("shutdown", async args => { exited = true; if (source != null) { await source.Task; } await Dispatcher.BeginInvoke(new Action(() => { if (_vlc != null) { _vlc.Stop(); _vlc.Dispose(); } if (VlcContext.IsInitialized) { VlcContext.CloseAll(); } Shutdown(); })); return(new object[] { }); }); client.Register("handle", async args => { if (exited) { return(null); } await Dispatcher.BeginInvoke(new Action(() => { if (_vlc != null) { _vlc.Dispose(); } _vlc = new VlcControlHeadless((IntPtr)long.Parse(args[0].ToString())); SetupPlayer(); })); return(new object[] { }); }); client.Subscribe("play", args => { if (!string.IsNullOrEmpty(args[0].ToString())) { _duration = TimeSpan.FromSeconds(0); var split = args[0].ToString().Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); //var split2 = _arguments.ToString().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); _currentMedia = new LocationMedia(split[0]); SetHandlersForMedia(_currentMedia); _vlc.Media = _currentMedia; if (split.Length > 1) { foreach (var extra in split.Skip(1)) { //MessageBox.Show(extra); _currentMedia.AddOption(extra); } } } else { _vlc.Play(); } }); client.Subscribe("position", args => { _vlc.Position = float.Parse(args[0].ToString()); }); client.Subscribe("pause", args => { _vlc.Pause(); }); client.Subscribe("next", args => { try { if (_currentMedia as LocationMedia == null) { return; } var subitems = (_currentMedia as LocationMedia).SubItems; var cmedia = _vlc.Media as LocationMedia; if (cmedia == null) { return; } var index = subitems.IndexOf(subitems.First(m => m.MRL == cmedia.MRL)); if (subitems.Count > 0 && index < subitems.Count - 1) { _vlc.Next(); } } catch { } }); client.Subscribe("previous", args => { try { if (_currentMedia as LocationMedia == null) { return; } var subitems = (_currentMedia as LocationMedia).SubItems; var cmedia = _vlc.Media as LocationMedia; if (cmedia == null) { return; } var index = subitems.IndexOf(subitems.First(m => m.MRL == cmedia.MRL)); if (subitems.Count > 0 && index > 0) { _vlc.Previous(); } } catch { } }); client.Subscribe("next-subtitle", args => { if (_vlc.VideoProperties.SpuDescription.Next != null && _vlc.VideoProperties.SpuDescription.Next.Id != _vlc.VideoProperties.CurrentSpuIndex) { _vlc.VideoProperties.CurrentSpuIndex = _vlc.VideoProperties.SpuDescription.Next.Id; } else { _vlc.VideoProperties.CurrentSpuIndex = -1; } _vlc.VideoProperties.SetSubtitleFile(null); }); client.Subscribe("set-subtitles", args => { var title = args[0].ToString(); if (title == "-1" && _subtitles?.Any(kv => kv.Key.ToString() == title) == true) { _vlc.VideoProperties.CurrentSpuIndex = -1; _vlc.VideoProperties.SetSubtitleFile(null); } else if (_subtitles.Count > 1) { _vlc.VideoProperties.CurrentSpuIndex = _subtitles.Keys.Skip(1).First(); _vlc.VideoProperties.SetSubtitleFile(null); } }); if (await client.ConnectAsync(5000)) { client.Start(); } else { Shutdown(); } } catch (Exception ex) { //MessageBox.Show(ex.Message); } }