private async Task <object> GetPlaylistAsync(VideoStreamRequest request, string name) { var state = await GetState(request, CancellationToken.None).ConfigureAwait(false); var builder = new StringBuilder(); builder.AppendLine("#EXTM3U"); builder.AppendLine("#EXT-X-VERSION:3"); builder.AppendLine("#EXT-X-TARGETDURATION:" + state.SegmentLength.ToString(UsCulture)); builder.AppendLine("#EXT-X-MEDIA-SEQUENCE:0"); var queryStringIndex = Request.RawUrl.IndexOf('?'); var queryString = queryStringIndex == -1 ? string.Empty : Request.RawUrl.Substring(queryStringIndex); var seconds = TimeSpan.FromTicks(state.RunTimeTicks ?? 0).TotalSeconds; var index = 0; while (seconds > 0) { var length = seconds >= state.SegmentLength ? state.SegmentLength : seconds; builder.AppendLine("#EXTINF:" + length.ToString(UsCulture)); builder.AppendLine(string.Format("hlsdynamic/{0}/{1}.ts{2}", name, index.ToString(UsCulture), queryString)); seconds -= state.SegmentLength; index++; } builder.AppendLine("#EXT-X-ENDLIST"); var playlistText = builder.ToString(); return(ResultFactory.GetResult(playlistText, MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary <string, string>())); }
private async Task <object> GetAsync(GetMasterHlsVideoStream request) { var state = await GetState(request, CancellationToken.None).ConfigureAwait(false); int audioBitrate; int videoBitrate; GetPlaylistBitrates(state, out audioBitrate, out videoBitrate); var appendBaselineStream = false; var baselineStreamBitrate = 64000; var hlsVideoRequest = state.VideoRequest as GetMasterHlsVideoStream; if (hlsVideoRequest != null) { appendBaselineStream = hlsVideoRequest.AppendBaselineStream; baselineStreamBitrate = hlsVideoRequest.BaselineStreamAudioBitRate ?? baselineStreamBitrate; } var playlistText = GetMasterPlaylistFileText(videoBitrate + audioBitrate, appendBaselineStream, baselineStreamBitrate); return(ResultFactory.GetResult(playlistText, MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary <string, string>())); }
public HttpResult(FileInfo fileResponse, bool asAttachment) : this(fileResponse, MimeTypes.GetMimeType(fileResponse.Name), asAttachment) { }
public override void Execute(IRequest req, IResponse res, object requestDto) { if (req.Verb != HttpMethods.Get && req.Verb != HttpMethods.Head) { return; } if (req.IsInProcessRequest()) { return; } var feature = HostContext.GetPlugin <HttpCacheFeature>(); if (feature == null) { throw new NotSupportedException(ErrorMessages.CacheFeatureMustBeEnabled.Fmt("[CacheResponse]")); } var keyBase = "res:" + req.RawUrl; var keySuffix = MimeTypes.GetExtension(req.ResponseContentType); var modifiers = ""; if (req.ResponseContentType == MimeTypes.Json) { string jsonp = req.GetJsonpCallback(); if (jsonp != null) { modifiers = "jsonp:" + jsonp.SafeVarName(); } } if (VaryByUser) { modifiers += (modifiers.Length > 0 ? "+" : "") + "user:"******"+" : "") + "role:" + role; } } } } } if (VaryByHeaders != null && VaryByHeaders.Length > 0) { foreach (var header in VaryByHeaders) { var value = req.GetHeader(header); if (!string.IsNullOrEmpty(value)) { modifiers += (modifiers.Length > 0 ? "+" : "") + $"{header}:{value}"; } } } if (modifiers.Length > 0) { keySuffix += "+" + modifiers; } var cacheInfo = new CacheInfo { KeyBase = keyBase, KeyModifiers = keySuffix, ExpiresIn = Duration > 0 ? TimeSpan.FromSeconds(Duration) : (TimeSpan?)null, MaxAge = MaxAge >= 0 ? TimeSpan.FromSeconds(MaxAge) : (TimeSpan?)null, CacheControl = CacheControl, VaryByUser = VaryByUser, LocalCache = LocalCache, NoCompression = NoCompression, }; if (req.HandleValidCache(cacheInfo)) { return; } req.Items[Keywords.CacheInfo] = cacheInfo; }
public HttpResult(IVirtualFile fileResponse, bool asAttachment) : this(fileResponse, MimeTypes.GetMimeType(fileResponse.Name), asAttachment) { }
public static string GetCacheKeyForSerialized(string cacheKey, string mimeType, string modifiers) { return(cacheKey + MimeTypes.GetExtension(mimeType) + modifiers); }