Example #1
0
 private void OnMediaServerRemoved(MediaServer aMediaServer)
 {
     if (MediaServerRemoved != null)
     {
         MediaServerRemoved(this, new EventArgsMediaServer(aMediaServer));
     }
 }
Example #2
0
    public static void Main()
    {
        MusicServer ms = new WinAmpServer();

        CallPlay(ms);
        ms = new MediaServer();
        CallPlay(ms);
    }
Example #3
0
 internal void AddMediaServer(MediaServer aMediaServer)
 {
     lock (iMediaServers)
     {
         iMediaServers.Add(aMediaServer);
     }
     OnMediaServerAdded(aMediaServer);
 }
Example #4
0
 internal void RemoveMediaServer(MediaServer aMediaServer)
 {
     lock (iMediaServers)
     {
         iMediaServers.Remove(aMediaServer);
     }
     OnMediaServerRemoved(aMediaServer);
 }
Example #5
0
        static async Task Main(string[] args)
        {
            CrossMediaManager.Current.Init();
            MediaServer mediaServer = new MediaServer();

            mediaServer.PlayFile();
            JukeboxServer server = new JukeboxServer();
            await server.Start();

            Console.WriteLine("Done.");
        }
Example #6
0
        private int server_ProcessFileRequest(HttpRequestContext context, HttpResponse response)
        {
            Uri uri = context.Request.URI;

            if (uri.AbsolutePath == "/test/test.mp3")
            {
                MediaServer.SetResponseFilePath(context, response, "C:\\Test.mp3");
                return(0);
            }

            return(-1);
        }
Example #7
0
 private void CreateMediaServer()
 {
     try
     {
         mMediaServer        = new MediaServer();
         mMediaServer.Debug += MediaServer_Debug;
         mMediaServer.Start();
     }
     catch (Exception ex)
     {
         WriteLog(LogMode.Error, string.Format("CreateMediaServer fail.\t{0}", ex.Message));
     }
 }
Example #8
0
        public bool Start()
        {
            if (!GConfHelper.ShareLibrary)
            {
                return(false);
            }

            var udn = "uuid:" + ServiceGuid.ToString();

            var    friendly_name     = GConfHelper.LibraryName;
            var    manufacturer      = "Mono Project";
            var    model_name        = "Mono.Upnp.Dcp.MediaServer1.FSpot";
            var    manufacturer_url  = new Uri("http://www.mono-project.org/");
            var    model_description = "A F-Spot add-in for sharing photos over the MediaServer1 spec.";
            var    model_number      = "1";
            var    model_url         = new Uri("http://www.mono-project.org/Mono.Upnp");
            var    serial_number     = "MONO-UPNP-MEDIA-SERVER-1";
            string upc = null;

            try {
                var ms_media_receiver_registrar = new Service <MSMediaReceiverRegistrar> (
                    MSMediaReceiverRegistrar.ServiceType, "urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar", new DummyMSMediaReceiverRegistrar());

                media_server = new MediaServer(
                    udn,
                    friendly_name,
                    manufacturer,
                    model_name,
                    new RootDeviceOptions {
                    Services         = new[] { ms_media_receiver_registrar },
                    ManufacturerUrl  = manufacturer_url,
                    ModelDescription = model_description,
                    ModelNumber      = model_number,
                    ModelUrl         = model_url,
                    SerialNumber     = serial_number,
                    Upc = upc
                },
                    new DummyConnectionManager(),
                    new FSpotContentDirectory()
                    );

                media_server.Start();

                IsRunning = true;

                return(true);
            } catch (Exception ex) {
                Console.WriteLine("Error starting Mono.Upnp server: {0}", ex.Message);
                return(false);
            }
        }
Example #9
0
        private async Task AddMediaServerAsync(DeviceDescription deviceDescription, Uri aliasUrl, Uri deviceDescriptionUrl, bool is_online_media_server)
        {
            if (_mediaServers.ContainsKey(deviceDescriptionUrl.AbsoluteUri))
            {
                return;
            }

            _mediaServers.Add(deviceDescriptionUrl.AbsoluteUri, null);
            MediaServer mediaServer = new MediaServer(deviceDescription, aliasUrl, deviceDescriptionUrl, is_online_media_server);
            await mediaServer.InitAsync();

            _mediaServers[deviceDescriptionUrl.AbsoluteUri] = mediaServer;

            if (OnMediaServerFound != null)
            {
                OnMediaServerFound(this, new MediaServerFoundEventArgs(mediaServer));
            }
        }
Example #10
0
        private void Run()
        {
            log4net.Config.BasicConfigurator.Configure();

            Console.Title = "Press 'q' to quit";

            Console.WriteLine("Starting...");

            using (var upnp = new UPnP())
            {
                var server = new MediaServer("TestManaged");
                server.BrowseMetadata       += new MediaServer.BrowseMetadataDelegate(server_BrowseMetadata);
                server.BrowseDirectChildren += new MediaServer.BrowseDirectChildrenDelegate(server_BrowseDirectChildren);
                server.ProcessFileRequest   += new MediaServer.ProcessFileRequestDelegate(server_ProcessFileRequest);

                upnp.AddDeviceHost(server);

                upnp.Start();

                #region handle keyboard

                for (bool quit = false; !quit;)
                {
                    switch (Console.ReadKey(true).KeyChar)
                    {
                    case 'q':
                        quit = true;

                        break;
                    }
                }

                #endregion

                server.BrowseMetadata       -= new MediaServer.BrowseMetadataDelegate(server_BrowseMetadata);
                server.BrowseDirectChildren -= new MediaServer.BrowseDirectChildrenDelegate(server_BrowseDirectChildren);
                server.ProcessFileRequest   -= new MediaServer.ProcessFileRequestDelegate(server_ProcessFileRequest);

                upnp.Stop();
            }

            Console.WriteLine("Stopped.");
        }
        /// <summary>
        /// Gets the JSON string value for the latest versions of Plex from
        /// the Plex download site.
        /// </summary>
        /// <returns>
        /// The JSON string value if the request was successful, or null if
        /// the request was not successful.
        /// </returns>
        private string GetPlexPackageJson()
        {
            string content;

            // Get the Plex token for the Plex user
            string token = MediaServer.GetToken(_plexUserRegistryKey);

            if (token != null)
            {
                _client.DefaultRequestHeaders.Add("X-Plex-Token", token);
            }

            try
            {
                // Get the URL for the package specified by the update channel
                // set in the Plex server
                string url = GetPackageUrl();
                if (url == null)
                {
                    return(null);
                }

                using (HttpResponseMessage response = _client.GetAsync(url).Result)
                {
                    content = response.Content.ReadAsStringAsync().Result;
                }

                return(content);
            }
            catch (HttpRequestException ex)
            {
                OnMessageChanged($"Could not get Plex package information. Message: {ex.Message}.");
                return(null);
            }
            catch (AggregateException ae)
            {
                foreach (var e in ae.Flatten().InnerExceptions)
                {
                    OnMessageChanged($"Could not get Plex package information. Message: {e.Message}.");
                }
                return(null);
            }
        }
Example #12
0
        private void Run()
        {
            log4net.Config.BasicConfigurator.Configure();

            Console.Title = "Press 'q' to quit";

            Console.WriteLine("Starting...");

            using (var upnp = new UPnP())
            {
                var server = new MediaServer("TestManaged");
                server.BrowseMetadata += new MediaServer.BrowseMetadataDelegate(server_BrowseMetadata);
                server.BrowseDirectChildren += new MediaServer.BrowseDirectChildrenDelegate(server_BrowseDirectChildren);
                server.ProcessFileRequest += new MediaServer.ProcessFileRequestDelegate(server_ProcessFileRequest);
                
                upnp.AddDeviceHost(server);

                upnp.Start();

                #region handle keyboard

                for (bool quit = false; !quit; )
                {
                    switch (Console.ReadKey(true).KeyChar)
                    {
                        case 'q':
                            quit = true;

                            break;
                    }
                }

                #endregion

                server.BrowseMetadata -= new MediaServer.BrowseMetadataDelegate(server_BrowseMetadata);
                server.BrowseDirectChildren -= new MediaServer.BrowseDirectChildrenDelegate(server_BrowseDirectChildren);
                server.ProcessFileRequest -= new MediaServer.ProcessFileRequestDelegate(server_ProcessFileRequest);

                upnp.Stop();
            }

            Console.WriteLine("Stopped.");
        }
Example #13
0
        public async Task <IEnumerable <TMedia> > GetMediasAsync <TMedia>(MediaServer mediaServer, bool cacheFirst = true) where TMedia : MediaItem
        {
            var key = AppConstants.GetMediasCacheKey(typeof(TMedia).Name, mediaServer.UDN);

            if (!cacheFirst || !_cache.TryGetValue <IEnumerable <TMedia> >(key, out var results))
            {
                results = await mediaServer.SearchAsync <TMedia>();

                foreach (var item in results)
                {
                    foreach (var r in item.Resources)
                    {
                        r.Uri = r.Uri.Replace("127.0.0.1", _localIp);
                    }
                }
                _cache.Set(key, results);
            }

            return(results);
        }
Example #14
0
File: Host.cs Project: ewin66/media
        /// <summary>
        /// Increments the fault count for the specified ServiceHost. If the new count
        /// is greater or equal to the _maxFaultsPerService, then the MediaServer Process is terminated.
        /// </summary>
        /// <param name="serviceHostName">service host configuration name</param>
        private static void RecordFault(string serviceHostName)
        {
            if (_maxFaultsPerService < 1)
            {
                return;
            }

            if (!_faultRecord.ContainsKey(serviceHostName))
            {
                _faultRecord.Add(serviceHostName, 1);
            }
            else
            {
                _faultRecord[serviceHostName]++;
                if (_faultRecord[serviceHostName] >= _maxFaultsPerService)
                {
                    ErrorLogger.WriteToEventLog("The ServiceHost " + serviceHostName + " reached the max consecutive fault limit (" + _maxFaultsPerService + ")", EventLogEntryType.Error);
                    MediaServer.CommitSuicide();
                }
            }
        }
Example #15
0
        public static async Task <MediaServer> TestSupportedOnlineDeviceAsync(Uri url)
        {
            try
            {
                Uri deviceDescriptionUrl = await DetectDeviceDescriptionUrlAsync(url);

                if (deviceDescriptionUrl == null)
                {
                    return(null);
                }

                DeviceDescription deviceDescription = await Deserializer.DeserializeXmlAsync <DeviceDescription>(deviceDescriptionUrl);

                MediaServer mediaServer = new MediaServer(deviceDescription, url, deviceDescriptionUrl, true);
                return(mediaServer);
            }
            catch
            {
                return(null);
            }
        }
Example #16
0
        public void RemoveListViewLibraries(MediaServer aServer)
        {
            if (iForm.InvokeRequired)
            {
                iForm.BeginInvoke(new RemoveListViewLibrariesDelegate(RemoveListViewLibraries), new object[] { aServer });
            }
            else
            {
                //iForm.ListViewLibrary.BeginUpdate();

                foreach (ListViewItem item in iForm.ListViewLibrary.Items)
                {
                    if (item.Text == aServer.Name)
                    {
                        iForm.ListViewLibrary.Items.Remove(item);
                        break;
                    }
                }

                //iForm.ListViewLibrary.EndUpdate();
            }
        }
Example #17
0
        static void Main(string[] args)
        {
            if (args != null && args.Length > 0)
            {
                if (args[0].ToUpper() == "C")
                {
                    //以控制台运行
                    try
                    {
                        IsConsole = true;
                        MediaServer mediaServer = new MediaServer();
                        mediaServer.Debug += MediaServer_Debug;
                        //调试模式
                        if (args.Length > 1 && args[1].ToUpper() == "D")
                        {
                            IsDebug = true;
                        }
                        mediaServer.Start();
                        Console.ReadLine();
                        mediaServer.Stop();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                    return;
                }
            }
            //以Windows服务器运行
            MediaService mediaService = new MediaService();

            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
            {
                mediaService
            };
            ServiceBase.Run(ServicesToRun);
        }
Example #18
0
        public void AddListViewLibraries(MediaServer aServer)
        {
            if (iForm.InvokeRequired)
            {
                iForm.BeginInvoke(new AddListViewLibrariesDelegate(AddListViewLibraries), new object[] { aServer });
            }
            else
            {
                //iForm.ListViewLibrary.BeginUpdate();

                bool   added = false;
                string name  = aServer.Name;
                if (name != null)
                {
                    ListViewItem item = new ListViewItem(name);
                    for (int i = 0; i < iForm.ListViewLibrary.Items.Count; ++i)
                    {
                        if (item.Text.CompareTo(iForm.ListViewLibrary.Items[i].Text) < 0)
                        {
                            iForm.ListViewLibrary.Items.Insert(i, item);
                            added = true;
                            break;
                        }
                    }
                    if (!added)
                    {
                        iForm.ListViewLibrary.Items.Add(item);
                    }
                }
                else
                {
                    Console.WriteLine("No name for server " + aServer);
                }

                //iForm.ListViewLibrary.EndUpdate();
            }
        }
Example #19
0
        public override async void OnNavigatedTo(NavigatedToEventArgs e, Dictionary <string, object> viewModelState)
        {
            base.OnNavigatedTo(e, viewModelState);

            var    parameters    = NavigationParameters.CreateFromString((string)e.Parameter);
            string mediaServerId = parameters.MediaServerId;

            mediaServer = await mediaServerRepository.FindAsync(mediaServerId);

            if (mediaServer == null)
            {
                return;
            }

            if (parameters.HasParentDirectoryId)
            {
                contentDirectory = mediaServer.GetContentDirectory(parameters.ParentDirectoryId);
            }
            else
            {
                contentDirectory = mediaServer;
            }

            if (contentDirectory == null)
            {
                return;
            }

            DirectoryItems = contentDirectory.DirectoryItems
                             .ToReadOnlyReactiveCollection()
                             .AddTo(Disposable);

            if (e.NavigationMode == NavigationMode.New)
            {
                await contentDirectory.LoadDirectoryItemsAsync();
            }
        }
Example #20
0
        private void AbortTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            _abortTimer.Enabled = false;
            string hangMessage = String.Format("Graph {0} is hung trying to enter {1} state", SourceConfig.SourceName, _abortState);

            AppLogger.Message(hangMessage);
            ErrorLogger.WriteToEventLog(hangMessage, EventLogEntryType.Error);

#if SUICIDE_ON_DSHANG
            MediaServer.CommitSuicide();
#endif

            //Calling Abort on the DS graph seems to also hang... so this is commented out

            //AppLogger.Message(String.Format("trying to abort {0}", SourceConfig.SourceName));
            //int hr = _graphBuilder.Abort();
            //DsError.ThrowExceptionForHR(hr);

            //State = ServerGraphState.Aborted;
            //GraphManager.RemoveGraph(SourceConfig.SourceName);
            //_abortThread.Abort();

            //Dispose(true);
        }
Example #21
0
        private void MediaServerAdded(object sender, Library.EventArgsMediaServer e)
        {
            try
            {
                ModelMediaServer mediaServer = new ModelMediaServer(e.MediaServer, iSupport.EventUpnpProvider);

                iMutex.WaitOne();
                if (iSortedMediaServers.ContainsKey(e.MediaServer.Name))
                {
                    MediaServer matched = null;
                    foreach (MediaServer m in iMediaServers.Keys)
                    {
                        if (m.Name.Equals(e.MediaServer.Name))
                        {
                            matched = m;
                            break;
                        }
                    }
                    if (matched != null)
                    {
                        iMediaServers.Remove(matched);
                    }
                    iSortedMediaServers.Remove(e.MediaServer.Name);
                }
                iMediaServers.Add(e.MediaServer, mediaServer);
                iSortedMediaServers.Add(e.MediaServer.Name, mediaServer);
                Assert.Check(iMediaServers.Keys.Count == iSortedMediaServers.Count);
                iMutex.ReleaseMutex();

                if (EventContentAdded != null)
                {
                    EventContentAdded(this, EventArgs.Empty);
                }
            }
            catch (ServiceException) { }
        }
Example #22
0
        private void MoveToContentDirectoryPage(MediaServer selectedMediaServer)
        {
            var parameters = new NavigationParameters(selectedMediaServer.Id);

            navigationService.Navigate(PageTokens.Directory.ToString(), parameters.ToString());
        }
Example #23
0
        public static void Main(string[] args)
        {
            string path              = null;
            var    udn               = "uuid:" + Guid.NewGuid().ToString();
            var    friendly_name     = "Mono.Upnp File System MediaServer";
            var    manufacturer      = "Mono Project";
            var    model_name        = "Mono.Upnp.Dcp.MediaServer1.FileSystem.ConsoleClient";
            var    manufacturer_url  = new Uri("http://www.mono-project.org/");
            var    model_description = "A console client for sharing file system folders over the MediaServer1 spec.";
            var    model_number      = "1";
            var    model_url         = new Uri("http://www.mono-project.org/Mono.Upnp");
            var    serial_number     = "MONO-UPNP-MEDIA-SERVER-1";
            string upc               = null;
            var    help              = false;

            var options = new OptionSet {
                { "p|path=", "the path of the directory to share.", v => path = v },
                { "u|udn=", "the Unique Device Name of the MediaServer device.", v => udn = v },
                { "f|friendly-name=", "the friendly name of the MediaServer device.", v => friendly_name = v },
                { "m|manufacturer=", "The name of the MediaServer device manufacturer.", v => manufacturer = v },
                { "n|name=", "the name of the MediaServer device model.", v => model_name = v },
                { "manufacturer-url=", "the URL for the MediaServer device manufacturer.", v => manufacturer_url = new Uri(v) },
                { "d|description=", "a description of the MediaServer device.", v => model_description = v },
                { "model-number=", "the model number of the MediaServer device.", v => model_number = v },
                { "model_url=", "the URL for the MediaServer device.", v => model_url = new Uri(v) },
                { "serial-number=", "the serial number for the MediaServer device.", v => serial_number = v },
                { "upc=", "the Universal Product Code for the MediaServer device.", v => upc = v },
                { "h|?|help", "show this help message and exit.", v => help = v != null }
            };

            List <string> extras;

            try
            {
                extras = options.Parse(args);
            }
            catch (Exception e)
            {
                Console.WriteLine("mono-upnp-simple-media-server:");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try mono-upnp-simple-media-server --help for more info.");
                return;
            }

            if (extras.Count == 0)
            {
                if (path == null)
                {
                    path = Directory.GetCurrentDirectory();
                }
            }
            else if (extras.Count == 1)
            {
                if (path != null)
                {
                    Console.WriteLine("mono-upnp-simple-media-server:");
                    Console.WriteLine("You can only specify one path. You specified 2:");
                    Console.WriteLine("\t" + path);
                    Console.WriteLine("\t" + extras[0]);
                    Console.WriteLine("Try mono-upnp-simple-media-server --help for more info.");
                    return;
                }
                else
                {
                    path = extras[0];
                }
            }
            else
            {
                Console.WriteLine("mono-upnp-simple-media-server:");
                Console.WriteLine(string.Format("You can only specify one path. You specified {0}:", extras.Count));
                foreach (var extra in extras)
                {
                    Console.WriteLine("\t" + extra);
                }
                Console.WriteLine("Try mono-upnp-simple-media-server --help for more info.");
                return;
            }

            if (help)
            {
                ShowHelp(options);
                return;
            }

            Console.WriteLine("Serving " + path);

            var connection_manager        = new DummyConnectionManager();
            var content_directory         = BuildContentDirectory(path);
            var ms_media_server_registrar = new Service <MSMediaReceiverRegistrar>(
                MSMediaReceiverRegistrar.ServiceType,
                "urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar",
                new DummyMSMediaReceiverRegistrar());
            var media_server = new MediaServer(
                udn,
                friendly_name,
                manufacturer,
                model_name,
                new DeviceOptions
            {
                Services         = new[] { ms_media_server_registrar },
                ManufacturerUrl  = manufacturer_url,
                ModelDescription = model_description,
                ModelNumber      = model_number,
                ModelUrl         = model_url,
                SerialNumber     = serial_number,
                Upc = upc
            },
                connection_manager,
                content_directory
                );

            using (media_server)
            {
                media_server.Start();
                Console.WriteLine("Press ENTER to exit.");
                Console.ReadLine();
            }
        }
Example #24
0
        /// <summary>
        /// Get Raumfeld DeviceDescription and create new MediaServer
        /// </summary>
        /// <returns></returns>
        //private async Task<MediaServer> loadMediaServerAsync()
        //{
        //    //if ((raumfeldDevices?.Devices?.Count() ?? 0) == 0 || server == null) { return null; }

        //    string uuid = ((Guid)server.Properties["System.Devices.ContainerId"]).ToString().ToLower();
        //    try
        //    {
        //        string serverDescription = raumfeldDevices.Devices.Where(server => server.Udn.Replace("uuid:", "").ToLower() == uuid).Select(server => server.Location).FirstOrDefault();

        //        if (!string.IsNullOrEmpty(serverDescription))
        //        {
        //            Uri serverUri = new Uri(serverDescription);
        //            var httpFilter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter();
        //            httpFilter.CacheControl.ReadBehavior = Windows.Web.Http.Filters.HttpCacheReadBehavior.NoCache;
        //            using (HttpClient client = new HttpClient())
        //            {
        //                using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, serverUri))
        //                {
        //                    request.Headers.Add("User-Agent", "RaumfeldControl/0.0 RaumfeldProtocol/1");    /* RaumfeldControl/3.6 RaumfeldProtocol/399 Build => https://github.com/masmu/pulseaudio-dlna/issues/227 */
        //                    request.Headers.Add("Accept-Language", "en");
        //                    request.Headers.Add("ContentType", "text/xml; charset=\"utf - 8\"");

        //                    using (HttpResponseMessage response = await client.SendRequestAsync(request))
        //                    {
        //                        if (response.StatusCode == Windows.Web.Http.HttpStatusCode.Ok)
        //                        {
        //                            string xmlString = await response.Content.ReadAsStringAsync();

        //                            XmlDocument xmlDocument = new XmlDocument();
        //                            xmlDocument.LoadXml(xmlString);
        //                            if (xmlDocument != null)
        //                            {
        //                                DeviceDescription deviceDescription = xmlDocument.GetXml().Deserialize<DeviceDescription>();
        //                                MediaServer mediaServer = new MediaServer(deviceDescription, serverUri.Host, serverUri.Port)
        //                                {
        //                                    DeviceType = MediaDeviceType.MediaServer
        //                                };

        //                                await mediaServer.LoadServicesAsync();

        //                                return mediaServer;
        //                            }
        //                        }
        //                    }
        //                }
        //            }
        //        }
        //    }
        //    catch (Exception exception)
        //    {
        //        await UIService.ShowDialogAsync(string.Format("{0} {1}: {2}", UIService.GetResource("Error"), exception.HResult, exception.Message), "LoadMediaServer");
        //        Logger.GetLogger().SaveMessage(exception, "LoadMediaServerAsync");
        //    }
        //    return null;
        //}

        /// <summary>
        /// Get Raumfeld DeviceDescription and create new MediaRenderer
        /// </summary>
        /// <returns></returns>
        //private async Task<MediaRenderer> loadMediaRendererAsync(string rendererDescription, MediaDeviceType mediaDeviceType)
        //{
        //    //if ((raumfeldDevices?.Devices?.Count() ?? 0) == 0 || server == null) { return null; }

        //    try
        //    {
        //        if (!string.IsNullOrEmpty(rendererDescription))
        //        {
        //            Uri serverUri = new Uri(rendererDescription);
        //            var httpFilter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter();
        //            httpFilter.CacheControl.ReadBehavior = Windows.Web.Http.Filters.HttpCacheReadBehavior.NoCache;
        //            using (HttpClient client = new HttpClient(httpFilter))
        //            {
        //                using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, serverUri))
        //                {
        //                    request.Headers.Add("User-Agent", "RaumfeldControl/0.0 RaumfeldProtocol/1");    /* RaumfeldControl/3.6 RaumfeldProtocol/399 Build => https://github.com/masmu/pulseaudio-dlna/issues/227 */
        //                    request.Headers.Add("Accept-Language", "en");
        //                    request.Headers.Add("ContentType", "text/xml; charset=\"utf - 8\"");

        //                    using (HttpResponseMessage response = await client.SendRequestAsync(request))
        //                    {
        //                        if (response.StatusCode == Windows.Web.Http.HttpStatusCode.Ok)
        //                        {
        //                            string xmlString = await response.Content.ReadAsStringAsync();

        //                            XmlDocument xmlDocument = new XmlDocument();
        //                            xmlDocument.LoadXml(xmlString);
        //                            if (xmlDocument != null)
        //                            {
        //                                DeviceDescription deviceDescription = xmlDocument.GetXml().Deserialize<DeviceDescription>();

        //                                MediaRenderer mediaRenderer = new MediaRenderer(deviceDescription, serverUri.Host, serverUri.Port);
        //                                await mediaRenderer.LoadServicesAsync();

        //                                mediaRenderer.DeviceType = mediaDeviceType;

        //                                return mediaRenderer;
        //                            }
        //                        }
        //                    }
        //                }
        //            }
        //        }
        //    }
        //    catch (Exception exception)
        //    {
        //        await UIService.ShowDialogAsync(string.Format("{0} {1}: {2}", UIService.GetResource("Error"), exception.HResult, exception.Message), "LoadMediaRenderer");
        //        Logger.GetLogger().SaveMessage(exception, "LoadMediaRendererAsync");
        //    }

        //    return null;
        //}

        /// <summary>
        /// Get Raumfeld DeviceDescription and create new MediaRenderer
        /// </summary>
        /// <returns></returns>
        private async Task <MediaDevice> loadMediaDeviceAsync(string rendererDescription, MediaDeviceType mediaDeviceType)
        {
            try
            {
                if (!string.IsNullOrEmpty(rendererDescription))
                {
                    Uri serverUri  = new Uri(rendererDescription);
                    var httpFilter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter();
                    httpFilter.CacheControl.ReadBehavior = Windows.Web.Http.Filters.HttpCacheReadBehavior.NoCache;
                    using (HttpClient client = new HttpClient(httpFilter))
                    {
                        using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, serverUri))
                        {
                            request.Headers.Add("User-Agent", "RaumfeldControl/0.0 RaumfeldProtocol/1");    /* RaumfeldControl/3.6 RaumfeldProtocol/399 Build => https://github.com/masmu/pulseaudio-dlna/issues/227 */
                            request.Headers.Add("Accept-Language", "en");
                            request.Headers.Add("ContentType", "text/xml; charset=\"utf - 8\"");

                            using (HttpResponseMessage response = await client.SendRequestAsync(request))
                            {
                                if (response.StatusCode == Windows.Web.Http.HttpStatusCode.Ok)
                                {
                                    string xmlString = await response.Content.ReadAsStringAsync();

                                    XmlDocument xmlDocument = new XmlDocument();
                                    xmlDocument.LoadXml(xmlString);
                                    if (xmlDocument != null)
                                    {
                                        DeviceDescription deviceDescription = xmlDocument.GetXml().Deserialize <DeviceDescription>();

                                        if (mediaDeviceType == MediaDeviceType.MediaServer)
                                        {
                                            MediaServer mediaServer = new MediaServer(deviceDescription, serverUri.Host, serverUri.Port)
                                            {
                                                DeviceType = mediaDeviceType
                                            };
                                            await mediaServer.LoadServicesAsync();

                                            return(mediaServer);
                                        }
                                        else
                                        {
                                            MediaRenderer mediaRenderer = new MediaRenderer(deviceDescription, serverUri.Host, serverUri.Port)
                                            {
                                                DeviceType = mediaDeviceType
                                            };
                                            await mediaRenderer.LoadServicesAsync();

                                            mediaRenderer.DeviceType = mediaDeviceType;

                                            return(mediaRenderer);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                await UIService.ShowDialogAsync(string.Format("{0} {1}: {2}", UIService.GetResource("Error"), exception.HResult, exception.Message), "loadMediaDeviceAsync");

                Logger.GetLogger().SaveMessage(exception, "loadMediaDeviceAsync");
            }

            return(null);
        }
Example #25
0
        public bool Start ()
        {
            if (!GConfHelper.ShareLibrary) {
                return false;
            }

            var udn = "uuid:" + ServiceGuid.ToString ();

            var friendly_name = GConfHelper.LibraryName;
            var manufacturer = "Mono Project";
            var model_name = "Mono.Upnp.Dcp.MediaServer1.FSpot";
            var manufacturer_url = new Uri ("http://www.mono-project.org/");
            var model_description = "A F-Spot add-in for sharing photos over the MediaServer1 spec.";
            var model_number = "1";
            var model_url = new Uri ("http://www.mono-project.org/Mono.Upnp");
            var serial_number = "MONO-UPNP-MEDIA-SERVER-1";
            string upc = null;

            try {
                var ms_media_receiver_registrar = new Service<MSMediaReceiverRegistrar> (
                MSMediaReceiverRegistrar.ServiceType, "urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar", new DummyMSMediaReceiverRegistrar ());
                
                media_server = new MediaServer (
                    udn,
                    friendly_name,
                    manufacturer,
                    model_name,
                    new RootDeviceOptions {
                        Services = new[] { ms_media_receiver_registrar },
                        ManufacturerUrl = manufacturer_url,
                        ModelDescription = model_description,
                        ModelNumber = model_number,
                        ModelUrl = model_url,
                        SerialNumber = serial_number,
                        Upc = upc
                    },
                    new DummyConnectionManager (),
                    new FSpotContentDirectory ()
                );
                
                media_server.Start ();

                IsRunning = true;

                return true;
            } catch (Exception ex) {
                Console.WriteLine ("Error starting Mono.Upnp server: {0}", ex.Message);
                return false;
            }
        }
Example #26
0
 public static void InitializeMediaConnection(string mediaserver)
 {
     MediaConnection = new MediaServer(mediaserver);
 }
Example #27
0
 public Music(MediaServer mediaServer, Dlna.ContentDirectory.Item item)
 {
     this.mediaServer = mediaServer;
     Id   = item.ID;
     Name = item.Title;
 }
        static void Main(string[] args)
        {
            Console.Out.WriteLine("Use 'ls' to list the contents of a content directory.");
            Console.Out.WriteLine("Use 'cd X' to change into a new content directory. X is the number output by the 'ls' command.");
            Console.Out.WriteLine("Use 'q' to quit.\n");
            Console.Out.WriteLine("Wait for a few seconds while the list of media servers populates below:\n");

            string             command = "ls";
            List <MediaServer> servers = MediaServer.All();
            int serverIndex            = -1;
            int childIndex;
            List <ContentDirectory> stack = new List <ContentDirectory>();

            while (command != "q")
            {
                string[] commandArgs = command.Split(' ');
                command = commandArgs[0];
                string obj = null;
                if (commandArgs.Length > 1)
                {
                    obj = commandArgs[1];
                }

                switch (command)
                {
                case "ls":
                    int i = 0;
                    if (stack.Count == 0)
                    {
                        //servers = MediaServer.All();
                        foreach (MediaServer s in servers)
                        {
                            Console.Out.WriteLine(i + ": " + s.Title);
                            i++;
                        }
                    }
                    else
                    {
                        foreach (ContentDirectory cd in stack[stack.Count - 1].Children)
                        {
                            Console.Out.WriteLine(i + ": " + cd.Title);
                            i++;
                        }
                    }
                    break;

                case "cd":
                    if (obj == "..")
                    {
                        if (stack.Count > 0)
                        {
                            stack.RemoveAt(stack.Count - 1);
                        }
                        else
                        {
                            break;
                        }
                    }
                    else
                    {
                        childIndex = int.Parse(obj);
                        if (stack.Count == 0 && childIndex < servers.Count && childIndex >= 0)
                        {
                            stack.Add(servers[childIndex].ContentDirectory);
                        }
                        else if (stack.Count == 0)
                        {
                            Console.Out.WriteLine("Not a valid server.");
                        }
                        else
                        {
                            stack.Add(stack[stack.Count - 1].Children[childIndex]);
                        }
                    }
                    break;

                default:
                    Console.Out.WriteLine("Invalid command. Try 'ls' to list the current options then 'cd X' into one of them or 'cd ..' to back up a directory.");
                    break;
                }

                Console.Out.Write("\nEnter command (q to quit): ");
                command = Console.In.ReadLine();
            }
        }
Example #29
0
 public MediaServerFoundEventArgs(MediaServer mediaServer)
 {
     MediaServer = mediaServer;
 }
Example #30
0
        private async void onDeviceAdded(DeviceInformation args)
        {
            // Examples of e.Value.Properties
            // System.Devices.ContainerId: e0acfce3-b225-4b5d-80d5-c240553ff32e
            // ([]) System.Devices.CompatibleIds: urn:schemas-upnp-org:device:MediaRenderer:1
            // ([]) System.Devices.IpAddress: 192.168.0.18
            // {A45C254E-DF1C-4EFD-8020-67D146A850E0},15: http://192.168.0.18:54797/e0acfce3-b225-4b5d-80d5-c240553ff32e.xml

            Guid ContainerId;

            string[] CompatibleIds      = null;
            string[] IpAddress          = null;
            string   DeviceLocationInfo = null;

            foreach (var prop in args.Properties)
            {
                switch (prop.Key)
                {
                case "System.Devices.ContainerId":
                    ContainerId = (Guid)prop.Value;
                    break;

                case "System.Devices.CompatibleIds":
                    CompatibleIds = prop.Value as string[];
                    break;

                case "System.Devices.IpAddress":
                    IpAddress = prop.Value as string[];
                    break;

                case "{A45C254E-DF1C-4EFD-8020-67D146A850E0} 15":
                    DeviceLocationInfo = prop.Value as string;
                    break;

                default:
                    break;
                }
            }

            //Check if Deive is a server or a renderer
            if ((CompatibleIds?.Count() ?? 0) > 0 && !string.IsNullOrEmpty(DeviceLocationInfo))
            {
                MediaDeviceType mediaDeviceType;

                switch (CompatibleIds[0])
                {
                case "urn:schemas-upnp-org:device:MediaServer:1":
                    mediaDeviceType = MediaDeviceType.MediaServer;
                    break;

                case "urn:schemas-upnp-org:device:MediaRenderer:1":
                    mediaDeviceType = MediaDeviceType.MediaRenderer;
                    break;

                default:
                    mediaDeviceType = MediaDeviceType.Unknown;
                    break;
                }

                IMediaDevice mediaDevice = await loadMediaDeviceAsync(DeviceLocationInfo, mediaDeviceType);

                devices[args.Id] = mediaDevice;

                if (mediaDeviceType == MediaDeviceType.MediaServer)
                {
                    //Assign MediaServer
                    mediaServer = mediaDevice as MediaServer;
                }

                //await getRaumfeldZones();
            }
        }
Example #31
0
 public static void Main (string[] args)
 {
     string path = null;
     var udn = "uuid:" + Guid.NewGuid ().ToString ();
     var friendly_name = "Mono.Upnp File System MediaServer";
     var manufacturer = "Mono Project";
     var model_name = "Mono.Upnp.Dcp.MediaServer1.FileSystem.ConsoleClient";
     var manufacturer_url = new Uri ("http://www.mono-project.org/");
     var model_description = "A console client for sharing file system folders over the MediaServer1 spec.";
     var model_number = "1";
     var model_url = new Uri ("http://www.mono-project.org/Mono.Upnp");
     var serial_number = "MONO-UPNP-MEDIA-SERVER-1";
     string upc = null;
     var help = false;
     
     var options = new OptionSet {
         { "p|path=", "the path of the directory to share.", v => path = v },
         { "u|udn=", "the Unique Device Name of the MediaServer device.", v => udn = v },
         { "f|friendly-name=", "the friendly name of the MediaServer device.", v => friendly_name = v },
         { "m|manufacturer=", "The name of the MediaServer device manufacturer.", v => manufacturer = v },
         { "n|name=", "the name of the MediaServer device model.", v => model_name = v },
         { "manufacturer-url=", "the URL for the MediaServer device manufacturer.", v => manufacturer_url = new Uri (v) },
         { "d|description=", "a description of the MediaServer device.", v => model_description = v },
         { "model-number=", "the model number of the MediaServer device.", v => model_number = v },
         { "model_url=", "the URL for the MediaServer device.", v => model_url = new Uri (v) },
         { "serial-number=", "the serial number for the MediaServer device.", v => serial_number = v },
         { "upc=", "the Universal Product Code for the MediaServer device.", v => upc = v },
         { "h|?|help", "show this help message and exit.", v => help = v != null }
     };
     
     List<string> extras;
     
     try {
         extras = options.Parse (args);
     } catch (Exception e) {
         Console.WriteLine ("mono-upnp-simple-media-server:");
         Console.WriteLine (e.Message);
         Console.WriteLine ("Try mono-upnp-simple-media-server --help for more info.");
         return;
     }
     
     if (extras.Count == 0) {
         if (path == null) {
             path = Directory.GetCurrentDirectory ();
         }
     } else if (extras.Count == 1) {
         if (path != null) {
             Console.WriteLine ("mono-upnp-simple-media-server:");
             Console.WriteLine ("You can only specify one path. You specified 2:");
             Console.WriteLine ("\t" + path);
             Console.WriteLine ("\t" + extras[0]);
             Console.WriteLine ("Try mono-upnp-simple-media-server --help for more info.");
             return;
         } else {
             path = extras[0];
         }
     } else {
         Console.WriteLine ("mono-upnp-simple-media-server:");
         Console.WriteLine (string.Format ("You can only specify one path. You specified {0}:", extras.Count));
         foreach (var extra in extras) {
             Console.WriteLine ("\t" + extra);
         }
         Console.WriteLine ("Try mono-upnp-simple-media-server --help for more info.");
         return;
     }
     
     if (help) {
         ShowHelp (options);
         return;
     }
     
     Console.WriteLine ("Serving " + path);
     
     var connection_manager = new DummyConnectionManager ();
     var content_directory = BuildContentDirectory (path);
     var ms_media_server_registrar = new Service<MSMediaReceiverRegistrar> (
         MSMediaReceiverRegistrar.ServiceType,
         "urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar",
         new DummyMSMediaReceiverRegistrar ());
     var media_server = new MediaServer (
         udn,
         friendly_name,
         manufacturer,
         model_name,
         new RootDeviceOptions {
             Services = new[] { ms_media_server_registrar },
             ManufacturerUrl = manufacturer_url,
             ModelDescription = model_description,
             ModelNumber = model_number,
             ModelUrl = model_url,
             SerialNumber = serial_number,
             Upc = upc
         },
         connection_manager,
         content_directory
     );
     
     using (media_server) {
         media_server.Start ();
         Console.WriteLine ("Press ENTER to exit.");
         Console.ReadLine ();
     }
 }
Example #32
0
 internal EventArgsMediaServer(MediaServer aMediaServer)
 {
     MediaServer = aMediaServer;
 }
Example #33
0
        static void Main(string[] args)
        {
            while (true)
            {
                var line = Console.ReadLine();

                args = line.Trim().Split(' ');

                string cmd = args[0].ToLowerInvariant();

                if (cmd == "start")
                {
                    if (GatewayServer == null)
                    {
                        GatewayServer = new GatewayServer(6608, 10000);
                        GatewayServer.ClientConnected      += GatewayServer_ClientConnected;
                        GatewayServer.ClientDisconnected   += GatewayServer_ClientDisconnected;
                        GatewayServer.ClientRuntimeUpdated += GatewayServer_ClientRuntimeUpdated;
                    }
                    GatewayServer.Start();

                    if (MediaServer == null)
                    {
                        MediaServer = new MediaServer("Media Server", 6602);
                        MediaServer.ClientConnected += MediaServer_ClientConnected;
                    }
                    MediaServer.Start();

                    if (MediaRtspServer == null)
                    {
                        MediaRtspServer = new MediaRtspServer(6601);
                    }
                    MediaRtspServer.Start();
                }
                else if (cmd == "stop")
                {
                    if (GatewayServer != null)
                    {
                        GatewayServer.Stop();
                    }

                    if (MediaServer != null)
                    {
                        MediaServer.Stop();
                    }
                }
                else if (cmd == "open")
                {
                    var devIDNO   = args[1];
                    var channelNo = int.Parse(args[2]);

                    GatewayServer.SendStartVideo(devIDNO, channelNo, ServerIp, 6602);
                }
                else if (cmd == "close")
                {
                    var devIDNO   = args[1];
                    var channelNo = int.Parse(args[2]);

                    GatewayServer.SendStopVideo(devIDNO, channelNo, ServerIp, 6602);
                }
            }
        }