Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
 private void ParseExtTargetDuration(PlaylistTagValue tag, LoadContext context)
 {
     TargetDuration = TimeSpan.FromSeconds(double.Parse(tag.WholeValue));
 }
Пример #4
0
 private void ParseExtMediaSequence(PlaylistTagValue tag, LoadContext context)
 {
     MediaSequence = int.Parse(tag.WholeValue);
 }
Пример #5
0
 private void ParseExtVersion(PlaylistTagValue tag, LoadContext context)
 {
     DocumentVersion = int.Parse(tag.WholeValue);
 }
Пример #6
0
 private void ParseStreamInf(PlaylistTagValue tag, LoadContext context)
 {
     context.StreamInf = tag;
 }
Пример #7
0
 private void ParseExtInf(PlaylistTagValue tag, LoadContext context)
 {
     context.ExtInf = tag;
 }