Esempio n. 1
0
        public static TValue AttributeObject <TValue>(this M3U8TagInstance tagInstance, M3U8ValueAttribute <TValue> attribute) where TValue : class
        {
            M3U8AttributeValueInstance <TValue> attributeValueInstance = M3U8TagInstanceExtensions.Attribute <TValue>(tagInstance, attribute);

            if (null == attributeValueInstance)
            {
                return(default(TValue));
            }
            return(attributeValueInstance.Value);
        }
Esempio n. 2
0
        public static TValue?AttributeValue <TValue>(this M3U8TagInstance tagInstance, M3U8ValueAttribute <TValue> attribute) where TValue : struct
        {
            M3U8AttributeValueInstance <TValue> attributeValueInstance = M3U8TagInstanceExtensions.Attribute <TValue>(tagInstance, attribute);

            if (null == attributeValueInstance)
            {
                return(new TValue?());
            }
            return(new TValue?(attributeValueInstance.Value));
        }
Esempio n. 3
0
        private static bool IsYesNo(M3U8TagInstance tag, M3U8ValueAttribute <string> attribute, bool defaultValue = false)
        {
            M3U8AttributeValueInstance <string> attributeValueInstance = M3U8TagInstanceExtensions.Attribute <string>(tag, attribute);

            if (attributeValueInstance == null || string.IsNullOrWhiteSpace(attributeValueInstance.Value))
            {
                return(defaultValue);
            }
            return(0 == string.CompareOrdinal("YES", attributeValueInstance.Value.ToUpperInvariant()));
        }
Esempio n. 4
0
        private async Task <IDictionary <long, Program> > LoadAsync(IWebReader webReader, M3U8Parser parser, CancellationToken cancellationToken)
        {
            Dictionary <string, HlsProgramManager.MediaGroup> audioStreams = new Dictionary <string, HlsProgramManager.MediaGroup>();

            foreach (M3U8TagInstance m3U8TagInstance in parser.GlobalTags)
            {
                if (M3U8Tags.ExtXMedia == m3U8TagInstance.Tag)
                {
                    try
                    {
                        if (null != M3U8TagInstanceExtensions.Attribute <string>(m3U8TagInstance, ExtMediaSupport.AttrType, "AUDIO"))
                        {
                            HlsProgramManager.AddMedia(parser.BaseUrl, m3U8TagInstance, audioStreams);
                        }
                    }
                    catch (NullReferenceException ex)
                    {
                    }
                }
            }
            Dictionary <long, Program> programs = new Dictionary <long, Program>();
            bool hasSegments = false;

            foreach (M3U8Parser.M3U8Uri m3U8Uri in parser.Playlist)
            {
                if (m3U8Uri.Tags == null || m3U8Uri.Tags.Length < 1)
                {
                    hasSegments = true;
                }
                else
                {
                    ExtStreamInfTagInstance streamInfTagInstance = M3U8Tags.ExtXStreamInf.Find((IEnumerable <M3U8TagInstance>)m3U8Uri.Tags);
                    long programId = long.MinValue;
                    HlsProgramManager.MediaGroup mediaGroup = (HlsProgramManager.MediaGroup)null;
                    if (null != streamInfTagInstance)
                    {
                        M3U8AttributeValueInstance <long> attributeValueInstance1 = M3U8TagInstanceExtensions.Attribute <long>((M3U8TagInstance)streamInfTagInstance, ExtStreamInfSupport.AttrProgramId);
                        if (null != attributeValueInstance1)
                        {
                            programId = attributeValueInstance1.Value;
                        }
                        string key = M3U8TagInstanceExtensions.AttributeObject <string>((M3U8TagInstance)streamInfTagInstance, ExtStreamInfSupport.AttrAudio);
                        if (null != key)
                        {
                            audioStreams.TryGetValue(key, out mediaGroup);
                        }
                        Uri uri = M3U8ParserExtensions.ResolveUrl(parser, m3U8Uri.Uri);
                        M3U8AttributeValueInstance <long> attributeValueInstance2 = M3U8TagInstanceExtensions.Attribute <long>((M3U8TagInstance)streamInfTagInstance, ExtStreamInfSupport.AttrBandwidth);
                        ResolutionAttributeInstance       attributeInstance       = M3U8TagInstanceExtensions.AttributeInstance <ResolutionAttributeInstance>((M3U8TagInstance)streamInfTagInstance, ExtStreamInfSupport.AttrResolution);
                        Uri               baseUrl          = parser.BaseUrl;
                        Program           program          = HlsProgramManager.GetProgram((IDictionary <long, Program>)programs, programId, baseUrl);
                        IHlsProgramStream hlsProgramStream = this._programStreamFactory.Create((ICollection <Uri>) new Uri[1]
                        {
                            uri
                        }, webReader);
                        PlaylistSubProgram playlistSubProgram1 = new PlaylistSubProgram((IProgram)program, (IProgramStream)hlsProgramStream);
                        playlistSubProgram1.Bandwidth  = attributeValueInstance2 == null ? 0L : attributeValueInstance2.Value;
                        playlistSubProgram1.Playlist   = uri;
                        playlistSubProgram1.AudioGroup = mediaGroup;
                        PlaylistSubProgram playlistSubProgram2 = playlistSubProgram1;
                        if (null != attributeInstance)
                        {
                            playlistSubProgram2.Width  = new int?(attributeInstance.X);
                            playlistSubProgram2.Height = new int?(attributeInstance.Y);
                        }
                        program.SubPrograms.Add((ISubProgram)playlistSubProgram2);
                    }
                    else
                    {
                        hasSegments = true;
                    }
                }
            }
            if (hasSegments)
            {
                Program           program          = HlsProgramManager.GetProgram((IDictionary <long, Program>)programs, long.MinValue, parser.BaseUrl);
                IHlsProgramStream hlsProgramStream = this._programStreamFactory.Create((ICollection <Uri>) new Uri[1]
                {
                    webReader.RequestUri
                }, webReader);
                await hlsProgramStream.SetParserAsync(parser, cancellationToken).ConfigureAwait(false);

                PlaylistSubProgram subProgram = new PlaylistSubProgram((IProgram)program, (IProgramStream)hlsProgramStream);
                program.SubPrograms.Add((ISubProgram)subProgram);
            }
            return((IDictionary <long, Program>)programs);
        }