private void ParseExtKey(PlaylistTagValue tag, LoadContext context) { var sMethod = tag.Values.GetOrDefault("METHOD"); var sUri = tag.Values.GetOrDefault("URI"); var sIV = tag.Values.GetOrDefault("IV"); var method = (sMethod?.ToUpperInvariant()) switch { "AES-128" => HlsKeyMethod.Aes128, "SAMPLE-AES" => HlsKeyMethod.SampleAes, "NONE" => HlsKeyMethod.None, _ => throw new NotSupportedException($"HLS encryption method '{sMethod}' is not supported."), }; Uri uri = null; if (!string.IsNullOrEmpty(sUri) && !Uri.TryCreate(sUri, UriKind.RelativeOrAbsolute, out uri)) { throw new PlaylistDocumentLoadException($"Invalid URI format: {sUri}"); } if (!string.IsNullOrEmpty(sIV) && sIV.StartsWith("0x", StringComparison.InvariantCultureIgnoreCase)) { sIV = sIV.Substring(2); } var iv = string.IsNullOrEmpty(sIV) ? null : StringToByteArray(sIV); Key = new HlsKey(method, uri, iv); }
private void ParseTagToken(LoadContext context) { if (context.ExtInf != null || context.StreamInf != null) { throw new PlaylistDocumentLoadException("Expected URI, but got TAG."); } var content = context.Token.Content; if (content[0] == '#') { content = content.Substring(1); } var tagValue = context.TagValue = PlaylistTagValue.Parse(content); var parser = _tagParsers.GetOrDefault(tagValue.Key); if (parser != null) { parser.Invoke(tagValue, context); } }
private void ParseExtTargetDuration(PlaylistTagValue tag, LoadContext context) { TargetDuration = TimeSpan.FromSeconds(double.Parse(tag.WholeValue)); }
private void ParseExtMediaSequence(PlaylistTagValue tag, LoadContext context) { MediaSequence = int.Parse(tag.WholeValue); }
private void ParseExtVersion(PlaylistTagValue tag, LoadContext context) { DocumentVersion = int.Parse(tag.WholeValue); }
private void ParseStreamInf(PlaylistTagValue tag, LoadContext context) { context.StreamInf = tag; }
private void ParseExtInf(PlaylistTagValue tag, LoadContext context) { context.ExtInf = tag; }