Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        /// <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
            {
            }
        }
Exemplo n.º 3
0
        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();
 }
Exemplo n.º 5
0
        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;
        }
Exemplo n.º 6
0
        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();
        }
Exemplo n.º 7
0
 /// <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
     {
     }
 }
Exemplo n.º 8
0
        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();
                    }
                }
            }
        }
Exemplo n.º 9
0
        /**************************************************************************************************************************/

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