Пример #1
0
            public void parse(String line, ParseState state)
            {
                lineParser.parse(line, state);

                Match match = ParseUtil.match(Constants.EXT_X_MEDIA_SEQUENCE_PATTERN, line, getTag());

                if (state.getMedia().mediaSequenceNumber != null)
                {
                    throw ParseException.create(ParseExceptionType.MULTIPLE_EXT_TAG_INSTANCES, getTag(), line);
                }

                state.getMedia().mediaSequenceNumber = ParseUtil.parseInt(match.Groups[1].Value, getTag());
            }
Пример #2
0
            public void parse(String line, ParseState state)
            {
                lineParser.parse(line, state);

                Match match = ParseUtil.match(Constants.EXT_X_TARGETDURATION_PATTERN, line, getTag());

                if (state.getMedia().targetDuration != null)
                {
                    throw ParseException.create(ParseExceptionType.MULTIPLE_EXT_TAG_INSTANCES, getTag(), line);
                }

                state.getMedia().targetDuration = ParseUtil.parseInt(match.Groups[1].Value, getTag());
            }
Пример #3
0
            public void parse(String line, ParseState state)
            {
                lineParser.parse(line, state);

                Match match = ParseUtil.match(Constants.EXT_X_PROGRAM_DATE_TIME_PATTERN, line, getTag());

                if (state.getMedia().programDateTime != null)
                {
                    throw ParseException.create(ParseExceptionType.MULTIPLE_EXT_TAG_INSTANCES, getTag(), line);
                }

                state.getMedia().programDateTime = ParseUtil.parseDateTime(line, getTag());
            }
Пример #4
0
            public void parse(String line, ParseState state)
            {
                lineParser.parse(line, state);

                Match match = ParseUtil.match(Constants.EXT_X_PLAYLIST_TYPE_PATTERN, line, getTag());

                if (state.getMedia().playlistType != null)
                {
                    throw ParseException.create(ParseExceptionType.MULTIPLE_EXT_TAG_INSTANCES, getTag(), line);
                }

                //state.getMedia().playlistType = ParseUtil.parseEnum(match.Groups[1].Value, typeof(PlaylistType), getTag());
                state.getMedia().playlistType = PlaylistType.fromValue(match.Groups[1].Value);
            }
Пример #5
0
        public void parse(String line, ParseState state)
        {
            TrackData.Builder builder    = new TrackData.Builder();
            MediaParseState   mediaState = state.getMedia();

            if (state.isExtended() && mediaState.trackInfo == null)
            {
                throw ParseException.create(ParseExceptionType.MISSING_TRACK_INFO, line);
            }

            mediaState.tracks.Add(builder
                                  .withUri(line)
                                  .withTrackInfo(mediaState.trackInfo)
                                  .withEncryptionData(mediaState.encryptionData)
                                  .withProgramDateTime(mediaState.programDateTime)
                                  .withDiscontinuity(mediaState.hasDiscontinuity)
                                  .withMapInfo(mediaState.mapInfo)
                                  .withByteRange(mediaState.byteRange)
                                  .build());

            mediaState.trackInfo        = null;
            mediaState.programDateTime  = null;
            mediaState.hasDiscontinuity = false;
            mediaState.mapInfo          = null;
            mediaState.byteRange        = null;
        }
Пример #6
0
            public void parse(String line, ParseState state)
            {
                lineParser.parse(line, state);
                Match match = ParseUtil.match(Constants.EXT_X_BYTERANGE_PATTERN, line, getTag());

                state.getMedia().byteRange = ParseUtil.matchByteRange(match);
            }
Пример #7
0
            public void parse(String line, ParseState state)
            {
                lineParser.parse(line, state);

                ParseUtil.match(Constants.EXT_X_ENDLIST_PATTERN, line, getTag());
                state.getMedia().endOfList = true;
            }
Пример #8
0
            public void parse(String line, ParseState state)
            {
                lineParser.parse(line, state);
                Match match = ParseUtil.match(Constants.EXT_X_DISCONTINUITY_PATTERN, line, getTag());

                state.getMedia().hasDiscontinuity = true;
            }
Пример #9
0
            public void parse(String line, ParseState state)
            {
                lineParser.parse(line, state);

                Match match = ParseUtil.match(Constants.EXTINF_PATTERN, line, getTag());

                state.getMedia().trackInfo = new TrackInfo(ParseUtil.parseFloat(match.Groups[1].Value, getTag()), match.Groups[2].Value);
            }
Пример #10
0
            public void parse(String line, ParseState state)
            {
                lineParser.parse(line, state);

                MapInfo.Builder builder = new MapInfo.Builder();

                ParseUtil.parseAttributes(line, builder, state, HANDLERS, getTag());
                state.getMedia().mapInfo = builder.build();
            }
Пример #11
0
            public void parse(String line, ParseState state)
            {
                lineParser.parse(line, state);

                StartData.Builder builder = new StartData.Builder();
                ParseUtil.parseAttributes(line, builder, state, HANDLERS, getTag());
                StartData startData = builder.build();

                state.getMedia().setStartData(startData);
            }
Пример #12
0
        public override Playlist parse()
        {
            validateAvailable();

            ParseState      state           = new ParseState(mEncoding);
            TrackLineParser trackLineParser = new TrackLineParser();

            try
            {
                state.setMedia();

                while (mScanner.hasNext())
                {
                    String line = mScanner.next();
                    validateLine(line);

                    if (line.Length == 0 || isComment(line))
                    {
                        continue;
                    }
                    else
                    {
                        trackLineParser.parse(line, state);
                    }
                }

                Playlist playlist = new Playlist.Builder()
                                    .withMediaPlaylist(new MediaPlaylist.Builder()
                                                       .withTracks(state.getMedia().tracks)
                                                       .build())
                                    .build();

                PlaylistValidation validation = PlaylistValidation.from(playlist);

                if (validation.isValid())
                {
                    return(playlist);
                }
                else
                {
                    throw new PlaylistException(mScanner.getInput(), validation.getErrors());
                }
            }
            catch (ParseException exception)
            {
                exception.setInput(mScanner.getInput());
                throw exception;
            }
        }
Пример #13
0
            public void parse(String line, ParseState state)
            {
                lineParser.parse(line, state);

                EncryptionData.Builder builder = new EncryptionData.Builder()
                                                 .withKeyFormat(Constants.DEFAULT_KEY_FORMAT)
                                                 .withKeyFormatVersions(Constants.DEFAULT_KEY_FORMAT_VERSIONS);

                ParseUtil.parseAttributes(line, builder, state, HANDLERS, getTag());

                EncryptionData encryptionData = builder.build();

                if (encryptionData.getMethod() != EncryptionMethod.NONE && encryptionData.getUri() == null)
                {
                    throw ParseException.create(ParseExceptionType.MISSING_ENCRYPTION_URI, getTag(), line);
                }

                state.getMedia().encryptionData = encryptionData;
            }
Пример #14
0
        public override Playlist parse()
        {
            validateAvailable();

            ParseState state           = new ParseState(mEncoding);
            LineParser playlistParser  = new PlaylistLineParser();
            LineParser trackLineParser = new TrackLineParser();

            try
            {
                while (mScanner.hasNext())
                {
                    String line = mScanner.next();
                    checkWhitespace(line);

                    if (line.Length == 0 || isComment(line))
                    {
                        continue;
                    }
                    else
                    {
                        if (isExtTag(line))
                        {
                            String tagKey = getExtTagKey(line);
                            mExtTagParsers.TryGetValue(tagKey, out IExtTagParser tagParser);

                            if (tagParser == null)
                            {
                                //To support forward compatibility, when parsing Playlists, Clients
                                //MUST:
                                //o  ignore any unrecognized tags.
                                if (mParsingMode.allowUnknownTags)
                                {
                                    tagParser = ExtLineParser.EXT_UNKNOWN_HANDLER;
                                }
                                else
                                {
                                    throw ParseException.create(ParseExceptionType.UNSUPPORTED_EXT_TAG_DETECTED, tagKey, line);
                                }
                            }

                            tagParser.parse(line, state);

                            if (state.isMedia() && state.getMedia().endOfList)
                            {
                                break;
                            }
                        }
                        else if (state.isMaster())
                        {
                            playlistParser.parse(line, state);
                        }
                        else if (state.isMedia())
                        {
                            trackLineParser.parse(line, state);
                        }
                        else
                        {
                            throw ParseException.create(ParseExceptionType.UNKNOWN_PLAYLIST_TYPE, line);
                        }
                    }
                }

                Playlist           playlist   = state.buildPlaylist();
                PlaylistValidation validation = PlaylistValidation.from(playlist, mParsingMode);

                if (validation.isValid())
                {
                    return(playlist);
                }
                else
                {
                    throw new PlaylistException(mScanner.getInput(), validation.getErrors());
                }
            }
            catch (ParseException exception)
            {
                exception.setInput(mScanner.getInput());
                throw exception;
            }
        }