mirror of
https://github.com/samsonjs/media.git
synced 2026-04-10 12:05:47 +00:00
Infer ISM content type from URL specified extension
PiperOrigin-RevId: 326012248
This commit is contained in:
parent
443468d103
commit
82b26357c9
2 changed files with 56 additions and 5 deletions
|
|
@ -141,6 +141,12 @@ public final class Util {
|
|||
+ "(T(([0-9]*)H)?(([0-9]*)M)?(([0-9.]*)S)?)?$");
|
||||
private static final Pattern ESCAPED_CHARACTER_PATTERN = Pattern.compile("%([A-Fa-f0-9]{2})");
|
||||
|
||||
// https://docs.microsoft.com/en-us/azure/media-services/previous/media-services-deliver-content-overview#URLs.
|
||||
private static final Pattern ISM_URL_PATTERN =
|
||||
Pattern.compile(".*\\.ism(?:l)?(?:/(?:manifest(?:\\((.+)\\))?)?)?");
|
||||
private static final String ISM_HLS_FORMAT_EXTENSION = "format=m3u8-aapl";
|
||||
private static final String ISM_DASH_FORMAT_EXTENSION = "format=mpd-time-csf";
|
||||
|
||||
// Replacement map of ISO language codes used for normalization.
|
||||
@Nullable private static HashMap<String, String> languageTagReplacementMap;
|
||||
|
||||
|
|
@ -1714,11 +1720,20 @@ public final class Util {
|
|||
return C.TYPE_DASH;
|
||||
} else if (fileName.endsWith(".m3u8")) {
|
||||
return C.TYPE_HLS;
|
||||
} else if (fileName.matches(".*\\.ism(l)?(/manifest(\\(.+\\))?)?")) {
|
||||
return C.TYPE_SS;
|
||||
} else {
|
||||
return C.TYPE_OTHER;
|
||||
}
|
||||
Matcher ismMatcher = ISM_URL_PATTERN.matcher(fileName);
|
||||
if (ismMatcher.matches()) {
|
||||
@Nullable String extensions = ismMatcher.group(1);
|
||||
if (extensions != null) {
|
||||
if (extensions.contains(ISM_DASH_FORMAT_EXTENSION)) {
|
||||
return C.TYPE_DASH;
|
||||
} else if (extensions.contains(ISM_HLS_FORMAT_EXTENSION)) {
|
||||
return C.TYPE_HLS;
|
||||
}
|
||||
}
|
||||
return C.TYPE_SS;
|
||||
}
|
||||
return C.TYPE_OTHER;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -89,13 +89,49 @@ public class UtilTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void inferContentType_returnsInferredResult() {
|
||||
public void inferContentType_handlesHlsIsmUris() {
|
||||
assertThat(Util.inferContentType("http://a.b/c.ism/manifest(format=m3u8-aapl)"))
|
||||
.isEqualTo(C.TYPE_HLS);
|
||||
assertThat(Util.inferContentType("http://a.b/c.ism/manifest(format=m3u8-aapl,quality=hd)"))
|
||||
.isEqualTo(C.TYPE_HLS);
|
||||
assertThat(Util.inferContentType("http://a.b/c.ism/manifest(quality=hd,format=m3u8-aapl)"))
|
||||
.isEqualTo(C.TYPE_HLS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void inferContentType_handlesHlsIsmV3Uris() {
|
||||
assertThat(Util.inferContentType("http://a.b/c.ism/manifest(format=m3u8-aapl-v3)"))
|
||||
.isEqualTo(C.TYPE_HLS);
|
||||
assertThat(Util.inferContentType("http://a.b/c.ism/manifest(format=m3u8-aapl-v3,quality=hd)"))
|
||||
.isEqualTo(C.TYPE_HLS);
|
||||
assertThat(Util.inferContentType("http://a.b/c.ism/manifest(quality=hd,format=m3u8-aapl-v3)"))
|
||||
.isEqualTo(C.TYPE_HLS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void inferContentType_handlesDashIsmUris() {
|
||||
assertThat(Util.inferContentType("http://a.b/c.isml/manifest(format=mpd-time-csf)"))
|
||||
.isEqualTo(C.TYPE_DASH);
|
||||
assertThat(Util.inferContentType("http://a.b/c.isml/manifest(format=mpd-time-csf,quality=hd)"))
|
||||
.isEqualTo(C.TYPE_DASH);
|
||||
assertThat(Util.inferContentType("http://a.b/c.isml/manifest(quality=hd,format=mpd-time-csf)"))
|
||||
.isEqualTo(C.TYPE_DASH);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void inferContentType_handlesSmoothStreamingIsmUris() {
|
||||
assertThat(Util.inferContentType("http://a.b/c.ism")).isEqualTo(C.TYPE_SS);
|
||||
assertThat(Util.inferContentType("http://a.b/c.isml")).isEqualTo(C.TYPE_SS);
|
||||
assertThat(Util.inferContentType("http://a.b/c.ism/")).isEqualTo(C.TYPE_SS);
|
||||
assertThat(Util.inferContentType("http://a.b/c.isml/")).isEqualTo(C.TYPE_SS);
|
||||
assertThat(Util.inferContentType("http://a.b/c.ism/Manifest")).isEqualTo(C.TYPE_SS);
|
||||
assertThat(Util.inferContentType("http://a.b/c.isml/manifest")).isEqualTo(C.TYPE_SS);
|
||||
assertThat(Util.inferContentType("http://a.b/c.isml/manifest(filter=x)")).isEqualTo(C.TYPE_SS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void inferContentType_handlesOtherIsmUris() {
|
||||
assertThat(Util.inferContentType("http://a.b/c.ism/video.mp4")).isEqualTo(C.TYPE_OTHER);
|
||||
assertThat(Util.inferContentType("http://a.b/c.ism/prefix-manifest")).isEqualTo(C.TYPE_OTHER);
|
||||
assertThat(Util.inferContentType("http://a.b/c.ism/manifest-suffix")).isEqualTo(C.TYPE_OTHER);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue