Skip to content

Commit 74d0f93

Browse files
marcbaechingerSheenaChhabra
authored andcommitted
Fix the regex used for validating custom CMCD key names
Relax the regex to only check for hyphen which is required by the specification. Issue: #1028 #minor-release PiperOrigin-RevId: 604719300 (cherry picked from commit 138532e)
1 parent 9f28e7d commit 74d0f93

File tree

5 files changed

+39
-25
lines changed

5 files changed

+39
-25
lines changed

‎RELEASENOTES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
* Add source prefix to all `Format.id` fields generated from
88
`MergingMediaSource`. This helps to identify which source produced a
99
`Format` ([#883](https://github.com/androidx/media/issues/883)).
10+
* Fix the regex used for validating custom Common Media Client Data (CMCD)
11+
key names by modifying it to only check for hyphen
12+
([#1028](https://github.com/androidx/media/issues/1028)).
1013
* Transformer:
1114
* Track Selection:
1215
* Extractors:

‎libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/CmcdData.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,12 @@ public static final class Factory {
8989
/** Represents the object type for muxed audio and video content in a media container. */
9090
public static final String OBJECT_TYPE_MUXED_AUDIO_AND_VIDEO = "av";
9191

92-
private static final Pattern CUSTOM_KEY_NAME_PATTERN =
93-
Pattern.compile("[a-zA-Z0-9]+(-[a-zA-Z0-9]+)+");
92+
/**
93+
* Custom key names MUST carry a hyphenated prefix to ensure that there will not be a namespace
94+
* collision with future revisions to this specification. Clients SHOULD use a reverse-DNS
95+
* syntax when defining their own prefix.
96+
*/
97+
private static final Pattern CUSTOM_KEY_NAME_PATTERN = Pattern.compile(".*-.*");
9498

9599
private final CmcdConfiguration cmcdConfiguration;
96100
private final ExoTrackSelection trackSelection;

‎libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/DefaultDashChunkSourceTest.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -459,8 +459,8 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
459459
@CmcdConfiguration.HeaderKey String, String>()
460460
.put(CmcdConfiguration.KEY_CMCD_OBJECT, "key-1=1")
461461
.put(CmcdConfiguration.KEY_CMCD_REQUEST, "key-2=\"stringValue\"")
462-
.put(CmcdConfiguration.KEY_CMCD_SESSION, "key-3=3")
463-
.put(CmcdConfiguration.KEY_CMCD_STATUS, "key-4=5.0")
462+
.put(CmcdConfiguration.KEY_CMCD_SESSION, "com.example-key3=3")
463+
.put(CmcdConfiguration.KEY_CMCD_STATUS, "com.example.test-key4=5.0")
464464
.build();
465465
}
466466
};
@@ -487,9 +487,11 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
487487
"CMCD-Request",
488488
"bl=0,dl=0,key-2=\"stringValue\",mtp=1000,nor=\"..%2Fvideo_4000_700000.m4s\",nrr=\"0-\",su",
489489
"CMCD-Session",
490-
"cid=\"mediaId\",key-3=3,sf=d,sid=\"" + cmcdConfiguration.sessionId + "\",st=v",
490+
"cid=\"mediaId\",com.example-key3=3,sf=d,sid=\""
491+
+ cmcdConfiguration.sessionId
492+
+ "\",st=v",
491493
"CMCD-Status",
492-
"key-4=5.0");
494+
"com.example.test-key4=5.0");
493495
}
494496

495497
@Test
@@ -505,7 +507,7 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
505507
getCustomData() {
506508
return new ImmutableListMultimap.Builder<
507509
@CmcdConfiguration.HeaderKey String, String>()
508-
.put(CmcdConfiguration.KEY_CMCD_OBJECT, "key-1=1")
510+
.put(CmcdConfiguration.KEY_CMCD_OBJECT, "com.example.test-key-1=1")
509511
.put(CmcdConfiguration.KEY_CMCD_REQUEST, "key-2=\"stringValue\"")
510512
.build();
511513
}
@@ -534,9 +536,9 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
534536
output.chunk.dataSpec.uri.getQueryParameter(
535537
CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY)))
536538
.isEqualTo(
537-
"bl=0,br=700,cid=\"mediaId\",d=4000,dl=0,key-1=1,key-2=\"stringValue\","
538-
+ "mtp=1000,nor=\"..%2Fvideo_4000_700000.m4s\",nrr=\"0-\",ot=v,sf=d,"
539-
+ "sid=\"sessionId\",st=v,su,tb=1300");
539+
"bl=0,br=700,cid=\"mediaId\",com.example.test-key-1=1,d=4000,dl=0,"
540+
+ "key-2=\"stringValue\",mtp=1000,nor=\"..%2Fvideo_4000_700000.m4s\",nrr=\"0-\","
541+
+ "ot=v,sf=d,sid=\"sessionId\",st=v,su,tb=1300");
540542
}
541543

542544
@Test

‎libraries/exoplayer_hls/src/test/java/androidx/media3/exoplayer/hls/HlsChunkSourceTest.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -367,8 +367,8 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
367367
@CmcdConfiguration.HeaderKey String, String>()
368368
.put(CmcdConfiguration.KEY_CMCD_OBJECT, "key-1=1")
369369
.put(CmcdConfiguration.KEY_CMCD_REQUEST, "key-2=\"stringValue\"")
370-
.put(CmcdConfiguration.KEY_CMCD_SESSION, "key-3=3")
371-
.put(CmcdConfiguration.KEY_CMCD_STATUS, "key-4=5.0")
370+
.put(CmcdConfiguration.KEY_CMCD_SESSION, "com.example-key3=3")
371+
.put(CmcdConfiguration.KEY_CMCD_STATUS, "com.example.test-key4=5.0")
372372
.build();
373373
}
374374
};
@@ -396,9 +396,11 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
396396
"CMCD-Request",
397397
"bl=0,dl=0,key-2=\"stringValue\",nor=\"..%2F3.mp4\",nrr=\"0-\",su",
398398
"CMCD-Session",
399-
"cid=\"mediaId\",key-3=3,sf=h,sid=\"" + cmcdConfiguration.sessionId + "\",st=v",
399+
"cid=\"mediaId\",com.example-key3=3,sf=h,sid=\""
400+
+ cmcdConfiguration.sessionId
401+
+ "\",st=v",
400402
"CMCD-Status",
401-
"key-4=5.0");
403+
"com.example.test-key4=5.0");
402404
}
403405

404406
@Test
@@ -414,7 +416,7 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
414416
getCustomData() {
415417
return new ImmutableListMultimap.Builder<
416418
@CmcdConfiguration.HeaderKey String, String>()
417-
.put(CmcdConfiguration.KEY_CMCD_OBJECT, "key-1=1")
419+
.put(CmcdConfiguration.KEY_CMCD_OBJECT, "com.example.test-key-1=1")
418420
.put(CmcdConfiguration.KEY_CMCD_REQUEST, "key-2=\"stringValue\"")
419421
.build();
420422
}
@@ -444,8 +446,9 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
444446
output.chunk.dataSpec.uri.getQueryParameter(
445447
CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY)))
446448
.isEqualTo(
447-
"bl=0,br=800,cid=\"mediaId\",d=4000,dl=0,key-1=1,key-2=\"stringValue\","
448-
+ "nor=\"..%2F3.mp4\",nrr=\"0-\",ot=v,sf=h,sid=\"sessionId\",st=v,su,tb=800");
449+
"bl=0,br=800,cid=\"mediaId\",com.example.test-key-1=1,d=4000,dl=0,"
450+
+ "key-2=\"stringValue\",nor=\"..%2F3.mp4\",nrr=\"0-\",ot=v,sf=h,"
451+
+ "sid=\"sessionId\",st=v,su,tb=800");
449452
}
450453

451454
private HlsChunkSource createHlsChunkSource(@Nullable CmcdConfiguration cmcdConfiguration) {

‎libraries/exoplayer_smoothstreaming/src/test/java/androidx/media3/exoplayer/smoothstreaming/DefaultSsChunkSourceTest.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,8 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
210210
@CmcdConfiguration.HeaderKey String, String>()
211211
.put(CmcdConfiguration.KEY_CMCD_OBJECT, "key-1=1")
212212
.put(CmcdConfiguration.KEY_CMCD_REQUEST, "key-2=\"stringValue\"")
213-
.put(CmcdConfiguration.KEY_CMCD_SESSION, "key-3=3")
214-
.put(CmcdConfiguration.KEY_CMCD_STATUS, "key-4=5.0")
213+
.put(CmcdConfiguration.KEY_CMCD_SESSION, "com.example-key3=3")
214+
.put(CmcdConfiguration.KEY_CMCD_STATUS, "com.example.test-key4=5.0")
215215
.build();
216216
}
217217
};
@@ -238,9 +238,11 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
238238
"CMCD-Request",
239239
"bl=0,dl=0,key-2=\"stringValue\",mtp=1000,nor=\"..%2FFragments(video%3D19680000)\",su",
240240
"CMCD-Session",
241-
"cid=\"mediaId\",key-3=3,sf=s,sid=\"" + cmcdConfiguration.sessionId + "\",st=v",
241+
"cid=\"mediaId\",com.example-key3=3,sf=s,sid=\""
242+
+ cmcdConfiguration.sessionId
243+
+ "\",st=v",
242244
"CMCD-Status",
243-
"key-4=5.0");
245+
"com.example.test-key4=5.0");
244246
}
245247

246248
@Test
@@ -256,7 +258,7 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
256258
getCustomData() {
257259
return new ImmutableListMultimap.Builder<
258260
@CmcdConfiguration.HeaderKey String, String>()
259-
.put(CmcdConfiguration.KEY_CMCD_OBJECT, "key-1=1")
261+
.put(CmcdConfiguration.KEY_CMCD_OBJECT, "com.example.test-key-1=1")
260262
.put(CmcdConfiguration.KEY_CMCD_REQUEST, "key-2=\"stringValue\"")
261263
.build();
262264
}
@@ -285,9 +287,9 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
285287
output.chunk.dataSpec.uri.getQueryParameter(
286288
CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY)))
287289
.isEqualTo(
288-
"bl=0,br=308,cid=\"mediaId\",d=1968,dl=0,key-1=1,key-2=\"stringValue\","
289-
+ "mtp=1000,nor=\"..%2FFragments(video%3D19680000)\",ot=v,sf=s,sid=\"sessionId\","
290-
+ "st=v,su,tb=1536");
290+
"bl=0,br=308,cid=\"mediaId\",com.example.test-key-1=1,d=1968,dl=0,"
291+
+ "key-2=\"stringValue\",mtp=1000,nor=\"..%2FFragments(video%3D19680000)\",ot=v,"
292+
+ "sf=s,sid=\"sessionId\",st=v,su,tb=1536");
291293
}
292294

293295
private SsChunkSource createSsChunkSource(

0 commit comments

Comments
 (0)