public void InitOnline(InputStreamPlayer player, Dictionary <string, string> properties)
        {
            var         videoSettings  = ServiceRegistration.Get <ISettingsManager>().Load <VideoSettings>();
            var         regionSettings = ServiceRegistration.Get <ISettingsManager>().Load <RegionSettings>();
            CultureInfo culture        = CultureInfo.CurrentUICulture;

            try
            {
                if (!string.IsNullOrEmpty(regionSettings.Culture))
                {
                    culture = CultureInfo.CreateSpecificCulture(regionSettings.Culture);
                }
            }
            catch { }

            // Prefer video in screen resolution
            var height = SkinContext.CurrentDisplayMode.Height;
            var width  = SkinContext.CurrentDisplayMode.Width;

            InputStream.StreamPreferences preferences = new InputStream.StreamPreferences
            {
                Width  = width,
                Height = height,
                ThreeLetterLangCode = culture.ThreeLetterISOLanguageName,
                PreferMultiChannel  = videoSettings.PreferMultiChannelAudio
            };

            InputStream onlineSource = new InputStream(properties["inputstream.streamurl"], properties, preferences);

            // Subtitle support depends on "files".
            string fakeFilename;

            if (properties.TryGetValue("fakefilename", out fakeFilename))
            {
                onlineSource.FakeFilename = fakeFilename;
            }

            foreach (string subKey in properties.Keys.Where(k => k.StartsWith("subtitle")))
            {
                onlineSource.SubtitlePaths.Add(properties[subKey]);
            }

            player.InitStream(onlineSource);
        }
        public IPlayer GetPlayer(MediaItem mediaItem)
        {
            string mimeType;
            string title;

            if (!mediaItem.GetPlayData(out mimeType, out title))
            {
                return(null);
            }

            PlaylistItem item = mediaItem as PlaylistItem;

            if (item != null && item.InputStreamSite != null)
            {
                Dictionary <string, string> properties;
                if (item.InputStreamSite.GetStreamProperties(item.VideoInfo, out properties))
                {
                    // Replace raw url / token source by resolved stream url
                    var resourceAccessor = new RawUrlResourceAccessor(properties["inputstream.streamurl"]);
                    IList <MultipleMediaItemAspect> providerResourceAspects;
                    MediaItemAspect.TryGetAspects(item.Aspects, ProviderResourceAspect.Metadata, out providerResourceAspects);
                    MultipleMediaItemAspect providerResourceAspect = providerResourceAspects.First();
                    String raPath = resourceAccessor.CanonicalLocalResourcePath.Serialize();
                    providerResourceAspect.SetAttribute(ProviderResourceAspect.ATTR_RESOURCE_ACCESSOR_PATH, raPath);

                    IResourceLocator  locator = mediaItem.GetResourceLocator();
                    InputStreamPlayer iplayer = (false) ?
                                                new InputStreamDownloader(@"F:\Capture\Dump.mkv") :
                                                new InputStreamPlayer();
                    try
                    {
                        InitOnline(iplayer, properties);
                        iplayer.SetMediaItem(locator, title);

                        if (iplayer.DecryptError)
                        {
                            throw new Exception("Decrypting by InputStream failed.");
                        }

                        return(iplayer);
                    }
                    catch (Exception ex)
                    {
                        ServiceRegistration.Get <ILogger>().Warn("Error playing media item '{0}': {1}", locator, ex.Message);
                        iplayer.Dispose();
                    }
                }
            }

            // Also try browser player as fallback if InputStream decoding failed
            if (mimeType == WebBrowserVideoPlayer.ONLINEVIDEOSBROWSER_MIMETYPE)
            {
                var player = new WebBrowserVideoPlayer();
                if (!player.Init(mediaItem))
                {
                    player.Dispose();
                    return(null);
                }
                return(player);
            }

            return(null);
        }