mirror of
https://github.com/samsonjs/media.git
synced 2026-03-30 10:15:48 +00:00
Infer ISM content type from URL specified extension
PiperOrigin-RevId: 326012248
This commit is contained in:
parent
fc2e4ef4fa
commit
590e81e5ae
4 changed files with 1180 additions and 7 deletions
|
|
@ -14,8 +14,8 @@
|
|||
([#7592](https://github.com/google/ExoPlayer/issues/7592)).
|
||||
* Fix handling of `traf` boxes containing multiple `sbgp` or `sgpd`
|
||||
boxes.
|
||||
* FLV: Ignore SCRIPTDATA segments with invalid name types, rather than failing
|
||||
playback ([#7675](https://github.com/google/ExoPlayer/issues/7675)).
|
||||
* FLV: Ignore `SCRIPTDATA` segments with invalid name types, rather than
|
||||
failing playback ([#7675](https://github.com/google/ExoPlayer/issues/7675)).
|
||||
* Workaround an issue on Broadcom based devices where playbacks would not
|
||||
transition to `STATE_ENDED` when using video tunneling mode
|
||||
([#7647](https://github.com/google/ExoPlayer/issues/7647)).
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -135,6 +135,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;
|
||||
|
||||
|
|
@ -1599,11 +1605,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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -77,13 +77,49 @@ public class UtilTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testInferContentType() {
|
||||
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