Skip to content

Commit 15fb8ac

Browse files
committed
Add support for detecting livestreams
1 parent 2b944fe commit 15fb8ac

1 file changed

Lines changed: 29 additions & 6 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamInfoItemLockupExtractor.java

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,33 @@ public YoutubeStreamInfoItemLockupExtractor(final JsonObject lockupViewModel,
4343
}
4444

4545
@Override
46-
public StreamType getStreamType() {
47-
// TODO only encountered video streams so far... Are there more types?
46+
public StreamType getStreamType() throws ParsingException {
47+
if (JsonUtils.getArray(lockupViewModel, "contentImage.thumbnailViewModel.overlays")
48+
.streamAsJsonObjects()
49+
.flatMap(overlay -> overlay
50+
.getObject("thumbnailOverlayBadgeViewModel")
51+
.getArray("thumbnailBadges")
52+
.streamAsJsonObjects())
53+
.map(thumbnailBadge -> thumbnailBadge.getObject("thumbnailBadgeViewModel"))
54+
.anyMatch(thumbnailBadgeViewModel -> {
55+
if ("THUMBNAIL_OVERLAY_BADGE_STYLE_LIVE".equals(
56+
thumbnailBadgeViewModel.getString("badgeStyle"))) {
57+
return true;
58+
}
59+
60+
// Fallback: Check if there is a live icon
61+
return thumbnailBadgeViewModel
62+
.getObject("icon")
63+
.getArray("sources")
64+
.streamAsJsonObjects()
65+
.map(source -> source
66+
.getObject("clientResource")
67+
.getString("imageName"))
68+
.anyMatch("LIVE"::equals);
69+
})) {
70+
return StreamType.LIVE_STREAM;
71+
}
72+
4873
return StreamType.VIDEO_STREAM;
4974
}
5075

@@ -84,10 +109,8 @@ public String getName() throws ParsingException {
84109

85110
@Override
86111
public long getDuration() throws ParsingException {
87-
final List<String> potentialDurations = lockupViewModel
88-
.getObject("contentImage")
89-
.getObject("thumbnailViewModel")
90-
.getArray("overlays")
112+
final List<String> potentialDurations = JsonUtils.getArray(lockupViewModel,
113+
"contentImage.thumbnailViewModel.overlays")
91114
.streamAsJsonObjects()
92115
.flatMap(jsonObject -> jsonObject
93116
.getObject("thumbnailOverlayBadgeViewModel")

0 commit comments

Comments
 (0)