Skip to content

Commit 9fbb538

Browse files
authored
Merge pull request #132 from Comcast/missing-multivariant-playlist-tags-from-draft-15
Add missing multivariant playlist tags and attributes from draft 15
2 parents db05335 + 2d21125 commit 9fbb538

14 files changed

+1655
-188
lines changed

mamba.xcodeproj/project.pbxproj

+41-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@
88

99
/* Begin PBXBuildFile section */
1010
01CD2E7A1DE4D46F002510E7 /* EXT_X_MAPTagParserTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01CD2E791DE4D46F002510E7 /* EXT_X_MAPTagParserTests.swift */; };
11+
1447582D2C83C20800D12CCD /* EXT_X_SESSION_KEYValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1447582C2C83C20800D12CCD /* EXT_X_SESSION_KEYValidator.swift */; };
12+
1447582E2C83C20800D12CCD /* EXT_X_SESSION_KEYValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1447582C2C83C20800D12CCD /* EXT_X_SESSION_KEYValidator.swift */; };
13+
1447582F2C83C20800D12CCD /* EXT_X_SESSION_KEYValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1447582C2C83C20800D12CCD /* EXT_X_SESSION_KEYValidator.swift */; };
14+
144758312C83C72B00D12CCD /* EXT_X_SESSION_DATATagValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 144758302C83C72B00D12CCD /* EXT_X_SESSION_DATATagValidator.swift */; };
15+
144758322C83C72B00D12CCD /* EXT_X_SESSION_DATATagValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 144758302C83C72B00D12CCD /* EXT_X_SESSION_DATATagValidator.swift */; };
16+
144758332C83C72B00D12CCD /* EXT_X_SESSION_DATATagValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 144758302C83C72B00D12CCD /* EXT_X_SESSION_DATATagValidator.swift */; };
17+
144758352C83D23100D12CCD /* EXT_X_SESSION_DATAPlaylistValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 144758342C83D23100D12CCD /* EXT_X_SESSION_DATAPlaylistValidator.swift */; };
18+
144758362C83D23100D12CCD /* EXT_X_SESSION_DATAPlaylistValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 144758342C83D23100D12CCD /* EXT_X_SESSION_DATAPlaylistValidator.swift */; };
19+
144758372C83D23100D12CCD /* EXT_X_SESSION_DATAPlaylistValidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 144758342C83D23100D12CCD /* EXT_X_SESSION_DATAPlaylistValidator.swift */; };
20+
144758392C8620C000D12CCD /* HLSChannelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 144758382C8620C000D12CCD /* HLSChannelsTests.swift */; };
21+
1447583A2C8620C000D12CCD /* HLSChannelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 144758382C8620C000D12CCD /* HLSChannelsTests.swift */; };
22+
1447583B2C8620C000D12CCD /* HLSChannelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 144758382C8620C000D12CCD /* HLSChannelsTests.swift */; };
23+
1447583D2C8693E000D12CCD /* HLSVideoLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1447583C2C8693E000D12CCD /* HLSVideoLayoutTests.swift */; };
24+
1447583E2C8693E000D12CCD /* HLSVideoLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1447583C2C8693E000D12CCD /* HLSVideoLayoutTests.swift */; };
25+
1447583F2C8693E000D12CCD /* HLSVideoLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1447583C2C8693E000D12CCD /* HLSVideoLayoutTests.swift */; };
1126
1D28F3451EAA9E500010320B /* hls_ad_master_playlist.m3u8 in Resources */ = {isa = PBXBuildFile; fileRef = 1D28F3401EAA9E500010320B /* hls_ad_master_playlist.m3u8 */; };
1227
1D28F3461EAA9E500010320B /* hls_ad_variant_playlist.m3u8 in Resources */ = {isa = PBXBuildFile; fileRef = 1D28F3411EAA9E500010320B /* hls_ad_variant_playlist.m3u8 */; };
1328
1D28F3471EAA9E500010320B /* hls_master_playlist_sap.m3u8 in Resources */ = {isa = PBXBuildFile; fileRef = 1D28F3421EAA9E500010320B /* hls_master_playlist_sap.m3u8 */; };
@@ -614,6 +629,11 @@
614629

615630
/* Begin PBXFileReference section */
616631
01CD2E791DE4D46F002510E7 /* EXT_X_MAPTagParserTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EXT_X_MAPTagParserTests.swift; sourceTree = "<group>"; };
632+
1447582C2C83C20800D12CCD /* EXT_X_SESSION_KEYValidator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EXT_X_SESSION_KEYValidator.swift; sourceTree = "<group>"; };
633+
144758302C83C72B00D12CCD /* EXT_X_SESSION_DATATagValidator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EXT_X_SESSION_DATATagValidator.swift; sourceTree = "<group>"; };
634+
144758342C83D23100D12CCD /* EXT_X_SESSION_DATAPlaylistValidator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EXT_X_SESSION_DATAPlaylistValidator.swift; sourceTree = "<group>"; };
635+
144758382C8620C000D12CCD /* HLSChannelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HLSChannelsTests.swift; sourceTree = "<group>"; };
636+
1447583C2C8693E000D12CCD /* HLSVideoLayoutTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HLSVideoLayoutTests.swift; sourceTree = "<group>"; };
617637
1D28F3401EAA9E500010320B /* hls_ad_master_playlist.m3u8 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hls_ad_master_playlist.m3u8; sourceTree = "<group>"; };
618638
1D28F3411EAA9E500010320B /* hls_ad_variant_playlist.m3u8 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hls_ad_variant_playlist.m3u8; sourceTree = "<group>"; };
619639
1D28F3421EAA9E500010320B /* hls_master_playlist_sap.m3u8 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = hls_master_playlist_sap.m3u8; sourceTree = "<group>"; };
@@ -900,7 +920,6 @@
900920
0173AB0D1D5BB371005DE51B /* Pantos-Generic Tag Validators */ = {
901921
isa = PBXGroup;
902922
children = (
903-
EC95478A1E5CC86300962535 /* EXTINFValidator.swift */,
904923
6DD0A1B0242FADC600FF7AAE /* EXT_X_DATERANGEPlaylistValidator.swift */,
905924
6DD0A1AC242F85C800FF7AAE /* EXT_X_DATERANGETagValidator.swift */,
906925
EC3B019E1DD4D47900B512E3 /* EXT_X_KEYValidator.swift */,
@@ -909,9 +928,13 @@
909928
EC3B01A11DD4D47900B512E3 /* EXT_X_MEDIARenditionGroupNAMEValidator.swift */,
910929
EC3B01A21DD4D47900B512E3 /* EXT_X_MEDIARenditionGroupTYPEValidator.swift */,
911930
43DE4EFC1E564DBE00EEE800 /* EXT_X_MEDIARenditionINSTREAMIDValidator.swift */,
931+
144758342C83D23100D12CCD /* EXT_X_SESSION_DATAPlaylistValidator.swift */,
932+
144758302C83C72B00D12CCD /* EXT_X_SESSION_DATATagValidator.swift */,
933+
1447582C2C83C20800D12CCD /* EXT_X_SESSION_KEYValidator.swift */,
912934
43DE4EFA1E564DA300EEE800 /* EXT_X_STARTTimeOffsetValidator.swift */,
913935
EC3B01A31DD4D47900B512E3 /* EXT_X_STREAM_INFRenditionGroupValidator.swift */,
914936
EC3B01A41DD4D47900B512E3 /* EXT_X_TARGETDURATIONLengthValidator.swift */,
937+
EC95478A1E5CC86300962535 /* EXTINFValidator.swift */,
915938
EC7491F51DD29DD300AF4E20 /* GenericDictionaryTagValidator.swift */,
916939
EC7491F61DD29DD300AF4E20 /* GenericSingleTagValidator.swift */,
917940
EC7491F71DD29DD300AF4E20 /* HLSDictionaryTagValueIdentifier.swift */,
@@ -1310,10 +1333,12 @@
13101333
EC9BCAA21D749D8B0032BEBE /* Value Types */ = {
13111334
isa = PBXGroup;
13121335
children = (
1336+
144758382C8620C000D12CCD /* HLSChannelsTests.swift */,
13131337
EC7492AF1DD29F8900AF4E20 /* HLSCodecArrayTests.swift */,
13141338
EC7492B01DD29F8900AF4E20 /* HLSMediaTypeTests.swift */,
13151339
EC7492B11DD29F8900AF4E20 /* HLSPlaylistTypeTests.swift */,
13161340
EC7492B21DD29F8900AF4E20 /* HLSResolutionTests.swift */,
1341+
1447583C2C8693E000D12CCD /* HLSVideoLayoutTests.swift */,
13171342
);
13181343
path = "Value Types";
13191344
sourceTree = "<group>";
@@ -1761,6 +1786,7 @@
17611786
ECFAA6581E6DD93C00398D66 /* HLSPlaylist.swift in Sources */,
17621787
ECC410601EA02F4800B4E3C8 /* StructureState.swift in Sources */,
17631788
EC7491811DD29C3500AF4E20 /* String+Trim.swift in Sources */,
1789+
144758352C83D23100D12CCD /* EXT_X_SESSION_DATAPlaylistValidator.swift in Sources */,
17641790
EC7491C31DD29D5C00AF4E20 /* HLSValidationIssue.swift in Sources */,
17651791
EC74916E1DD29B5D00AF4E20 /* CollectionType+FindExtensions.swift in Sources */,
17661792
EC7491DA1DD29D9600AF4E20 /* GenericNoDataTagParser.swift in Sources */,
@@ -1830,7 +1856,9 @@
18301856
EC3B01AB1DD4D47900B512E3 /* EXT_X_MEDIARenditionGroupNAMEValidator.swift in Sources */,
18311857
EC7491651DD29B0F00AF4E20 /* FailableStringLiteralConvertible.swift in Sources */,
18321858
EC7491461DD299B400AF4E20 /* HLSPlaylistTypes.swift in Sources */,
1859+
144758312C83C72B00D12CCD /* EXT_X_SESSION_DATATagValidator.swift in Sources */,
18331860
EC3B01A71DD4D47900B512E3 /* EXT_X_MEDIARenditionGroupAUTOSELECTValidator.swift in Sources */,
1861+
1447582D2C83C20800D12CCD /* EXT_X_SESSION_KEYValidator.swift in Sources */,
18341862
F700CD391E78A2BE001C9487 /* HLSStringRef_ConcreteNSString.m in Sources */,
18351863
43DE4EFB1E564DA300EEE800 /* EXT_X_STARTTimeOffsetValidator.swift in Sources */,
18361864
EC74918A1DD29CCB00AF4E20 /* StringDictionaryParser.swift in Sources */,
@@ -1908,11 +1936,13 @@
19081936
43DE4EFF1E564E1500EEE800 /* HLSMediaSpanTests.swift in Sources */,
19091937
ECE36DE41F2A9F10005E5DA7 /* HLSPlaylistTimelineAndSequencingTests.swift in Sources */,
19101938
01CD2E7A1DE4D46F002510E7 /* EXT_X_MAPTagParserTests.swift in Sources */,
1939+
144758392C8620C000D12CCD /* HLSChannelsTests.swift in Sources */,
19111940
EC7492481DD29E7300AF4E20 /* HLSValidatorTests.swift in Sources */,
19121941
EC7492AB1DD29F7000AF4E20 /* OrderedDictionaryTests.swift in Sources */,
19131942
EC74923E1DD29E7300AF4E20 /* HLSParser_Super8DemuxedTests.swift in Sources */,
19141943
EC7492781DD29EC800AF4E20 /* EXT_X_MEDIATagParserTests.swift in Sources */,
19151944
EC6F38921EA95882006BC30E /* HLSPlaylistInterfaceTests.swift in Sources */,
1945+
1447583D2C8693E000D12CCD /* HLSVideoLayoutTests.swift in Sources */,
19161946
);
19171947
runOnlyForDeploymentPostprocessing = 0;
19181948
};
@@ -1926,6 +1956,7 @@
19261956
ECFAA6591E6DD93C00398D66 /* HLSPlaylist.swift in Sources */,
19271957
ECC410611EA02F4800B4E3C8 /* StructureState.swift in Sources */,
19281958
EC3B01AA1DD4D47900B512E3 /* EXT_X_MEDIARenditionGroupDEFAULTValidator.swift in Sources */,
1959+
144758362C83D23100D12CCD /* EXT_X_SESSION_DATAPlaylistValidator.swift in Sources */,
19291960
EC3B01C41DD4D49A00B512E3 /* HLSPlaylistOneToManyValidator.swift in Sources */,
19301961
EC7491821DD29C3500AF4E20 /* String+Trim.swift in Sources */,
19311962
EC7491C41DD29D5C00AF4E20 /* HLSValidationIssue.swift in Sources */,
@@ -1995,7 +2026,9 @@
19952026
EC74917E1DD29C3500AF4E20 /* String+DateParsing.swift in Sources */,
19962027
EC3B01AC1DD4D47900B512E3 /* EXT_X_MEDIARenditionGroupNAMEValidator.swift in Sources */,
19972028
EC7491661DD29B0F00AF4E20 /* FailableStringLiteralConvertible.swift in Sources */,
2029+
144758322C83C72B00D12CCD /* EXT_X_SESSION_DATATagValidator.swift in Sources */,
19982030
EC7491471DD299B400AF4E20 /* HLSPlaylistTypes.swift in Sources */,
2031+
1447582E2C83C20800D12CCD /* EXT_X_SESSION_KEYValidator.swift in Sources */,
19992032
F700CD3A1E78A2BE001C9487 /* HLSStringRef_ConcreteNSString.m in Sources */,
20002033
EC3B01A81DD4D47900B512E3 /* EXT_X_MEDIARenditionGroupAUTOSELECTValidator.swift in Sources */,
20012034
EC74918B1DD29CCB00AF4E20 /* StringDictionaryParser.swift in Sources */,
@@ -2073,11 +2106,13 @@
20732106
43DE4F001E564E1500EEE800 /* HLSMediaSpanTests.swift in Sources */,
20742107
EC7492B41DD29F8900AF4E20 /* HLSCodecArrayTests.swift in Sources */,
20752108
ECE36DE51F2A9F10005E5DA7 /* HLSPlaylistTimelineAndSequencingTests.swift in Sources */,
2109+
1447583A2C8620C000D12CCD /* HLSChannelsTests.swift in Sources */,
20762110
EC7492491DD29E7300AF4E20 /* HLSValidatorTests.swift in Sources */,
20772111
EC7492AC1DD29F7000AF4E20 /* OrderedDictionaryTests.swift in Sources */,
20782112
EC74923F1DD29E7300AF4E20 /* HLSParser_Super8DemuxedTests.swift in Sources */,
20792113
EC8A3C801F7C329900A50EED /* HLSPlaylistStructureMasterTests.swift in Sources */,
20802114
EC7492791DD29EC800AF4E20 /* EXT_X_MEDIATagParserTests.swift in Sources */,
2115+
1447583E2C8693E000D12CCD /* HLSVideoLayoutTests.swift in Sources */,
20812116
);
20822117
runOnlyForDeploymentPostprocessing = 0;
20832118
};
@@ -2091,6 +2126,7 @@
20912126
EC1CCD36209A2CF9006B59FF /* URL+hlsplaylist.swift in Sources */,
20922127
EC1CCD32209A2CF9006B59FF /* String+Trim.swift in Sources */,
20932128
EC1CCD46209A2CF9006B59FF /* GenericSingleTagValidator.swift in Sources */,
2129+
144758372C83D23100D12CCD /* EXT_X_SESSION_DATAPlaylistValidator.swift in Sources */,
20942130
EC1CCD59209A2CF9006B59FF /* HLSParser.swift in Sources */,
20952131
EC1CCD30209A2CF9006B59FF /* String+DateParsing.swift in Sources */,
20962132
EC1CCD53209A2CF9006B59FF /* GenericDictionaryTagWriter.swift in Sources */,
@@ -2160,7 +2196,9 @@
21602196
EC1CCD4F209A2CF9006B59FF /* HLSPlaylistTagCardinalityValidation.swift in Sources */,
21612197
EC1CCD2B209A2CF9006B59FF /* IndeterminateBool.swift in Sources */,
21622198
EC1CCCF9209A2CF9006B59FF /* HLSTagCriterion.swift in Sources */,
2199+
144758332C83C72B00D12CCD /* EXT_X_SESSION_DATATagValidator.swift in Sources */,
21632200
EC1CCD43209A2CF9006B59FF /* EXT_X_STREAM_INFRenditionGroupValidator.swift in Sources */,
2201+
1447582F2C83C20800D12CCD /* EXT_X_SESSION_KEYValidator.swift in Sources */,
21642202
EC1CCD35209A2CF9006B59FF /* StringDictionaryParser.swift in Sources */,
21652203
EC1CCD02209A2CF9006B59FF /* HLSStringRef_ConcreteNSString.m in Sources */,
21662204
EC1CCD38209A2CF9006B59FF /* GenericNoDataTagParser.swift in Sources */,
@@ -2238,11 +2276,13 @@
22382276
ECE253FD209A50B500D388CE /* ThirdPartyTagListSupportTests.swift in Sources */,
22392277
ECE25408209A50B500D388CE /* HLSResolutionTests.swift in Sources */,
22402278
ECE253F6209A50B500D388CE /* GenericSingleValueTagParserTests.swift in Sources */,
2279+
1447583B2C8620C000D12CCD /* HLSChannelsTests.swift in Sources */,
22412280
ECE253FA209A50B500D388CE /* GenericSingleTagValidatorTests.swift in Sources */,
22422281
ECE253DF209A509900D388CE /* HLSParserTest.swift in Sources */,
22432282
ECE253F1209A50B500D388CE /* EXT_X_KEYTagParserTests.swift in Sources */,
22442283
ECE25403209A50B500D388CE /* String+Helio.swift in Sources */,
22452284
ECE25400209A50B500D388CE /* IndeterminateBoolTests.swift in Sources */,
2285+
1447583F2C8693E000D12CCD /* HLSVideoLayoutTests.swift in Sources */,
22462286
);
22472287
runOnlyForDeploymentPostprocessing = 0;
22482288
};

mambaSharedFramework/HLSValidationIssue.swift

+3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ public enum IssueDescription: String {
4848

4949
case HLSPlaylistRenditionGroupMatchingNAMELANGUAGEValidator = "A Playlist MAY contain multiple groups of the same TYPE in order to provide multiple encodings of each rendition. If it does so, each group of the same TYPE SHOULD contain corresponding members with the same NAME attribute, LANGUAGE attribute, and rendition."
5050
case EXT_X_KEYValidator = "EXT-X-KEY If the encryption method is NONE, the URI, IV, KEYFORMAT and KEYFORMATVERSIONS attributes MUST NOT be present. If the encryption method is AES-128 or SAMPLE-AES, the URI attribute MUST be present."
51+
case EXT_X_SESSION_KEYValidator = "All attributes defined for the EXT-X-KEY tag are also defined for the EXT-X-SESSION-KEY, except that the value of the METHOD attribute MUST NOT be NONE."
52+
case EXT_X_SESSION_DATATagValidator = "Each EXT-X-SESSION-DATA tag MUST contain either a VALUE or URI attribute, but not both."
53+
case EXT_X_SESSION_DATAPlaylistValidator = "A Playlist MAY contain multiple EXT-X-SESSION-DATA tags with the same DATA-ID attribute. A Playlist MUST NOT contain more than one EXT-X-SESSION-DATA tag with the same DATA-ID attribute and the same LANGUAGE attribute."
5154
case HLSPlaylistRenditionGroupMatchingPROGRAM_IDValidator = "Variant Playlists MUST contain an EXT-X-STREAM-INF tag or EXT-X-I-FRAME-STREAM-INF tag for each variant stream. Each tag identifying an encoding of the same presentation MUST have the same PROGRAM-ID attribute value."
5255
case EXT_X_STREAM_INFRenditionGroupAUDIOValidator = "EXT-X-STREAM-INF - AUDIO The value is a quoted-string. It MUST match the value of the GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Playlist whose TYPE attribute is AUDIO."
5356
case EXT_X_STREAM_INFRenditionGroupVIDEOValidator = "EXT-X-STREAM-INF - VIDEO The value is a quoted-string. It MUST match the value of the GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Playlist whose TYPE attribute is VIDEO."

0 commit comments

Comments
 (0)