예제 #1
0
        public HlsItem(HlsManager manager, string sessionId, Dictionary <string, string> parameters, CultureInfo cultureInfo)
        {
            this.sessionId = sessionId;
            this.manager   = manager;

            this.segmentTime = uint.Parse(parameters["hlsSegmentTime"]);

            this.streamItems.Add(0, new StreamItem()
            {
                Duration = this.segmentTime
            });

            string playlistPipeName = "HMC_" + sessionId;

            parameters["hlsPlaylistUrl"] = "\\\\.\\pipe\\" + playlistPipeName;
            this.playlistPipe            = CreatePipe(playlistPipeName);

            this.filePipe            = CreatePipe("HMC_" + (this.nextFilePipeIdx++) + "_" + this.sessionId);
            parameters["hlsFileUrl"] = "\\\\.\\pipe\\HMC_%d_" + sessionId;

            this.encoder = EncoderBuilder.GetEncoder(parameters);

            this.playlistPipeThread = new Thread(new ThreadStart(ListenPlaylistPipe));
            this.filePipeThread     = new Thread(new ThreadStart(ListenFilePipe));
            this.encoderThread      = new Thread(new ThreadStart(Encoder));
            if (cultureInfo != null)
            {
                this.playlistPipeThread.CurrentCulture = this.playlistPipeThread.CurrentUICulture = cultureInfo;
                this.filePipeThread.CurrentCulture     = this.filePipeThread.CurrentUICulture = cultureInfo;
                this.encoderThread.CurrentCulture      = this.encoderThread.CurrentUICulture = cultureInfo;
            }

            this.lastRequest = DateTime.Now;
        }
예제 #2
0
        public MediaServerDevice(string dataDirectory)
        {
            this.dataDirectory  = dataDirectory;
            this.settingsPath   = Path.Combine(dataDirectory, "settings.xml");
            this.databasePath   = Path.Combine(dataDirectory, "database.db");
            this.thumbnailsPath = Path.Combine(dataDirectory, "thumbnails");

            this.prefDsDemux = new List <Guid>()
            {
                new Guid(0x171252A0, 0x8820, 0x4AFE, 0x9D, 0xF8, 0x5C, 0x92, 0xB2, 0xD6, 0x6B, 0x04) //LAV Splitter
            };

            this.itemManager  = new ItemManager(this);
            this.controlPoint = new UpnpControlPoint(this);
            Version ver = Assembly.GetExecutingAssembly().GetName().Version;

            this.udn          = Guid.NewGuid();
            this.friendlyName = "Home Media Center";
            this.deviceType   = "urn:schemas-upnp-org:device:MediaServer:1";
            this.manufacturer = "Tomáš Pšenák";
            this.modelName    = "Home Media Center Server";
            this.modelNumber  = ver.Major + "." + ver.Minor;
            this.serialNumber = this.udn.ToString();
            this.modelUrl     = "http://hmc.codeplex.com";

            this.services.Add(new ConnectionManagerService(this, this.server));
            this.services.Add(new ContentDirectoryService(this, this.server));
            this.services.Add(new MediaReceiverRegistrarService(this, this.server));

            this.server.HttpServer.AddRoute("HEAD", "/Files/*", new HttpRouteDelegate(GetLibraryFile));
            this.server.HttpServer.AddRoute("GET", "/Files/*", new HttpRouteDelegate(GetLibraryFile));
            this.server.HttpServer.AddRoute("HEAD", "/Encode/*", new HttpRouteDelegate(GetLibraryEncode));
            this.server.HttpServer.AddRoute("GET", "/Encode/*", new HttpRouteDelegate(GetLibraryEncode));
            this.server.HttpServer.AddRoute("HEAD", "/Thumbnail/*", new HttpRouteDelegate(GetThumbnailFile));
            this.server.HttpServer.AddRoute("GET", "/Thumbnail/*", new HttpRouteDelegate(GetThumbnailFile));
            this.server.HttpServer.AddRoute("HEAD", "/Subtitle/*", new HttpRouteDelegate(GetSubtitleFile));
            this.server.HttpServer.AddRoute("GET", "/Subtitle/*", new HttpRouteDelegate(GetSubtitleFile));

            this.server.HttpServer.AddRoute("GET", "/", new HttpRouteDelegate(GetWeb));
            this.server.HttpServer.AddRoute("GET", "/Web/*", new HttpRouteDelegate(GetWeb));
            this.server.HttpServer.AddRoute("GET", "/favicon.ico", new HttpRouteDelegate(GetWebIco));
            this.server.HttpServer.AddRoute("GET", "/Web/player.html", new HttpRouteDelegate(GetWebPlayer));
            this.server.HttpServer.AddRoute("HEAD", "/Web/WebPlayer.xap", new HttpRouteDelegate(GetWebSilverlight));
            this.server.HttpServer.AddRoute("GET", "/Web/WebPlayer.xap", new HttpRouteDelegate(GetWebSilverlight));
            this.server.HttpServer.AddRoute("GET", "/Web/htmlstyle.css", new HttpRouteDelegate(GetWebStyle));
            this.server.HttpServer.AddRoute("GET", "/Web/jquery.lightbox-0.5.css", new HttpRouteDelegate(GetWebStyle));
            this.server.HttpServer.AddRoute("GET", "/Web/jquery-ui-1.11.1.custom.min.css", new HttpRouteDelegate(GetWebStyle));
            this.server.HttpServer.AddRoute("GET", "/Web/control.js", new HttpRouteDelegate(GetWebJavascript));
            this.server.HttpServer.AddRoute("GET", "/Web/player.js", new HttpRouteDelegate(GetWebJavascript));
            this.server.HttpServer.AddRoute("GET", "/Web/jquery-1.11.1.min.js", new HttpRouteDelegate(GetWebJavascript));
            this.server.HttpServer.AddRoute("GET", "/Web/jquery.lightbox-0.5.min.js", new HttpRouteDelegate(GetWebJavascript));
            this.server.HttpServer.AddRoute("GET", "/Web/jquery-ui-1.11.1.custom.min.js", new HttpRouteDelegate(GetWebJavascript));
            this.server.HttpServer.AddRoute("GET", "/Web/jquery.ui.touch-punch.min.js", new HttpRouteDelegate(GetWebJavascript));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/folder.png", new HttpRouteDelegate(GetWebPng));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/folderback.png", new HttpRouteDelegate(GetWebPng));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/htmllogo.png", new HttpRouteDelegate(GetWebPng));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/ui-icons_222222_256x240.png", new HttpRouteDelegate(GetWebPng));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/ui-icons_454545_256x240.png", new HttpRouteDelegate(GetWebPng));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/ui-icons_888888_256x240.png", new HttpRouteDelegate(GetWebPng));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/htmlarrow.gif", new HttpRouteDelegate(GetWebGif));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/htmlorangearrow.gif", new HttpRouteDelegate(GetWebGif));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/htmlleftcontent.gif", new HttpRouteDelegate(GetWebGif));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/htmlgreenbox.gif", new HttpRouteDelegate(GetWebGif));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/htmlrightnav.gif", new HttpRouteDelegate(GetWebGif));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/lightbox-blank.gif", new HttpRouteDelegate(GetWebGif));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/lightbox-btn-close.gif", new HttpRouteDelegate(GetWebGif));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/lightbox-btn-next.gif", new HttpRouteDelegate(GetWebGif));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/lightbox-btn-prev.gif", new HttpRouteDelegate(GetWebGif));
            this.server.HttpServer.AddRoute("GET", "/Web/Images/lightbox-ico-loading.gif", new HttpRouteDelegate(GetWebGif));
            this.server.HttpServer.AddRoute("GET", "/Web/flowplayer.min.js", new HttpRouteDelegate(GetWebJavascript));
            this.server.HttpServer.AddRoute("HEAD", "/Web/flowplayer.swf", new HttpRouteDelegate(GetWebShockwave));
            this.server.HttpServer.AddRoute("GET", "/Web/flowplayer.swf", new HttpRouteDelegate(GetWebShockwave));
            this.server.HttpServer.AddRoute("HEAD", "/Web/flowplayer.controls.swf", new HttpRouteDelegate(GetWebShockwave));
            this.server.HttpServer.AddRoute("GET", "/Web/flowplayer.controls.swf", new HttpRouteDelegate(GetWebShockwave));
            this.server.HttpServer.AddRoute("POST", "/Web/devices.xml", new HttpRouteDelegate(GetWebDevices));

            this.hlsManager = new HlsManager(this);
        }