public static Task <WebResolution> ProcessAsync(IOwinContext context, WebMediaType type, int?provider, string itemId, int?offset, string profileName) { if (itemId == null) { throw new BadRequestException("GetStreamSize: itemId is null"); } if (profileName == null) { throw new BadRequestException("GetStreamSize: profileName is null"); } ISet <Guid> necessaryMIATypes = new HashSet <Guid>(); necessaryMIATypes.Add(MediaAspect.ASPECT_ID); necessaryMIATypes.Add(ProviderResourceAspect.ASPECT_ID); necessaryMIATypes.Add(ImporterAspect.ASPECT_ID); ISet <Guid> optionalMIATypes = new HashSet <Guid>(); optionalMIATypes.Add(VideoAspect.ASPECT_ID); optionalMIATypes.Add(VideoStreamAspect.ASPECT_ID); optionalMIATypes.Add(VideoAudioStreamAspect.ASPECT_ID); optionalMIATypes.Add(ImageAspect.ASPECT_ID); var item = MediaLibraryAccess.GetMediaItemById(context, itemId, necessaryMIATypes, optionalMIATypes); if (item == null) { throw new NotFoundException(String.Format("GetStreamSize: No MediaItem found with id: {0}", itemId)); } EndPointProfile profile = null; List <EndPointProfile> namedProfiles = ProfileManager.Profiles.Where(x => x.Value.Name == profileName).Select(namedProfile => namedProfile.Value).ToList(); if (namedProfiles.Count > 0) { profile = namedProfiles[0]; } else if (ProfileManager.Profiles.ContainsKey(profileName)) { profile = ProfileManager.Profiles[profileName]; } if (profile == null) { throw new BadRequestException(string.Format("GetStreamSize: unknown profile: {0}", profileName)); } var target = new ProfileMediaItem(Guid.NewGuid().ToString(), profile, false); var output = new WebResolution(); if (target.IsImage) { output.Height = target.Image.Height ?? 0; output.Width = target.Image.Width ?? 0; } else if (target.IsVideo) { output.Height = target.Image.Height ?? 0; output.Width = target.Image.Width ?? 0; } return(Task.FromResult(output)); }
public ActionResult Player(WebStreamMediaType type, string itemId, bool video = true) { // get transcoding profile IWebStreamingService streamControl = GetStreamControl(type); WebTranscoderProfile profile = null; if (Request.QueryString["transcoder"] != null) { profile = GetStreamControl(type).GetTranscoderProfileByName(Request.QueryString["transcoder"]); } if (Request.Form["transcoder"] != null) { profile = GetStreamControl(type).GetTranscoderProfileByName(Request.Form["transcoder"]); } if (profile == null) { string defaultName = ""; if (type == WebStreamMediaType.TV || type == WebStreamMediaType.Recording) { defaultName = Settings.ActiveSettings.DefaultTVProfile; } else if (video) { defaultName = Settings.ActiveSettings.DefaultMediaProfile; } else { defaultName = Settings.ActiveSettings.DefaultAudioProfile; } profile = GetStreamControl(type).GetTranscoderProfileByName(defaultName); } // get all transcoder profiles List <StreamTarget> targets = video ? StreamTarget.GetVideoTargets() : StreamTarget.GetAudioTargets(); List <string> profiles = new List <string>(); foreach (StreamTarget target in targets) { profiles = profiles.Concat(GetStreamControl(type).GetTranscoderProfilesForTarget(target.Name).Select(x => x.Name)).ToList(); } // get view properties VideoPlayer player = targets.First(x => x.Name == profile.Target).Player; string viewName = Enum.GetName(typeof(VideoPlayer), player) + "Player"; // player size WebResolution playerSize; if (!video) { playerSize = new WebResolution() { Width = 300, Height = 150 }; } else { playerSize = GetStreamControl(type).GetStreamSize(type, GetProvider(type), itemId, profile.Name); } // generate url RouteValueDictionary parameters = new RouteValueDictionary(); parameters["item"] = itemId; parameters["transcoder"] = profile.Name; // generate view return(PartialView(new PlayerViewModel { Transcoders = profiles, Transcoder = profile.Name, Player = player, PlayerViewName = viewName, URL = Url.Action(Enum.GetName(typeof(WebStreamMediaType), type), parameters), Size = playerSize })); }