mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
HlsPlaylistParser: ignore subtitles without URI
Issue: #8323 PiperOrigin-RevId: 347827615
This commit is contained in:
parent
3b277b2810
commit
8da4eaa377
@ -38,6 +38,7 @@ import com.google.android.exoplayer2.source.hls.playlist.HlsMediaPlaylist.Rendit
|
|||||||
import com.google.android.exoplayer2.source.hls.playlist.HlsMediaPlaylist.Segment;
|
import com.google.android.exoplayer2.source.hls.playlist.HlsMediaPlaylist.Segment;
|
||||||
import com.google.android.exoplayer2.upstream.ParsingLoadable;
|
import com.google.android.exoplayer2.upstream.ParsingLoadable;
|
||||||
import com.google.android.exoplayer2.util.Assertions;
|
import com.google.android.exoplayer2.util.Assertions;
|
||||||
|
import com.google.android.exoplayer2.util.Log;
|
||||||
import com.google.android.exoplayer2.util.MimeTypes;
|
import com.google.android.exoplayer2.util.MimeTypes;
|
||||||
import com.google.android.exoplayer2.util.UriUtil;
|
import com.google.android.exoplayer2.util.UriUtil;
|
||||||
import com.google.android.exoplayer2.util.Util;
|
import com.google.android.exoplayer2.util.Util;
|
||||||
@ -66,6 +67,8 @@ import org.checkerframework.checker.nullness.qual.PolyNull;
|
|||||||
*/
|
*/
|
||||||
public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlaylist> {
|
public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlaylist> {
|
||||||
|
|
||||||
|
private static final String LOG_TAG = "HlsPlaylistParser";
|
||||||
|
|
||||||
private static final String PLAYLIST_HEADER = "#EXTM3U";
|
private static final String PLAYLIST_HEADER = "#EXTM3U";
|
||||||
|
|
||||||
private static final String TAG_PREFIX = "#EXT";
|
private static final String TAG_PREFIX = "#EXT";
|
||||||
@ -516,7 +519,11 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
|
|||||||
sampleMimeType = MimeTypes.TEXT_VTT;
|
sampleMimeType = MimeTypes.TEXT_VTT;
|
||||||
}
|
}
|
||||||
formatBuilder.setSampleMimeType(sampleMimeType).setMetadata(metadata);
|
formatBuilder.setSampleMimeType(sampleMimeType).setMetadata(metadata);
|
||||||
subtitles.add(new Rendition(uri, formatBuilder.build(), groupId, name));
|
if (uri != null) {
|
||||||
|
subtitles.add(new Rendition(uri, formatBuilder.build(), groupId, name));
|
||||||
|
} else {
|
||||||
|
Log.w(LOG_TAG, "EXT-X-MEDIA tag with missing mandatory URI attribute: skipping");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case TYPE_CLOSED_CAPTIONS:
|
case TYPE_CLOSED_CAPTIONS:
|
||||||
String instreamId = parseStringAttr(line, REGEX_INSTREAM_ID, variableDefinitions);
|
String instreamId = parseStringAttr(line, REGEX_INSTREAM_ID, variableDefinitions);
|
||||||
|
@ -108,6 +108,14 @@ public class HlsMasterPlaylistParserTest {
|
|||||||
+ "http://example.com/low.m3u8\n";
|
+ "http://example.com/low.m3u8\n";
|
||||||
|
|
||||||
private static final String PLAYLIST_WITH_SUBTITLES =
|
private static final String PLAYLIST_WITH_SUBTITLES =
|
||||||
|
" #EXTM3U \n"
|
||||||
|
+ "#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID=\"sub1\",URI=\"s1/en/prog_index.m3u8\","
|
||||||
|
+ "LANGUAGE=\"es\",NAME=\"Eng\"\n"
|
||||||
|
+ "#EXT-X-STREAM-INF:BANDWIDTH=1280000,"
|
||||||
|
+ "CODECS=\"mp4a.40.2,avc1.66.30\",RESOLUTION=304x128\n"
|
||||||
|
+ "http://example.com/low.m3u8\n";
|
||||||
|
|
||||||
|
private static final String PLAYLIST_WITH_SUBTITLES_NO_URI =
|
||||||
" #EXTM3U \n"
|
" #EXTM3U \n"
|
||||||
+ "#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID=\"sub1\","
|
+ "#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID=\"sub1\","
|
||||||
+ "LANGUAGE=\"es\",NAME=\"Eng\"\n"
|
+ "LANGUAGE=\"es\",NAME=\"Eng\"\n"
|
||||||
@ -354,6 +362,13 @@ public class HlsMasterPlaylistParserTest {
|
|||||||
assertThat(firstTextFormat.sampleMimeType).isEqualTo(MimeTypes.TEXT_VTT);
|
assertThat(firstTextFormat.sampleMimeType).isEqualTo(MimeTypes.TEXT_VTT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parseMasterPlaylist_subtitlesWithoutUri_skipsSubtitles() throws IOException {
|
||||||
|
HlsMasterPlaylist playlist = parseMasterPlaylist(PLAYLIST_URI, PLAYLIST_WITH_SUBTITLES_NO_URI);
|
||||||
|
|
||||||
|
assertThat(playlist.subtitles).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseMasterPlaylist_withIndependentSegments_hasNoIndenpendentSegments()
|
public void parseMasterPlaylist_withIndependentSegments_hasNoIndenpendentSegments()
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user