Feature/live chat comments#1481
Conversation
Adds StreamHeatmapEntry to hold the heatmap payload, updates StreamInfo and StreamExtractor with getStreamHeatmap(). Leverages the playerResponse json in YoutubeStreamExtractor to fetch and parse the intensityScoreNormalized marker recursively. Fixes test integration.
absurdlylongusername
left a comment
There was a problem hiding this comment.
Will do proper review later, but for now:
Please add tests. We should not be adding any new functionality to the extractor without adequate testing.
|
|
LGTM now. Is there a specific reason why this is still a draft? |
I forgot to reopen it |
YouTube is enforcing the SABR protocol on standard clients (WEB, ANDROID), which removes traditional stream URLs from adaptive formats. This leaves only the progressive 360p stream (itag 18) playable. This adds the ANDROID_VR client (Oculus Quest 3, client ID 28) as a fallback when the regular Android client returns SABR-only streaming data (adaptive formats without url/signatureCipher fields). The VR client still receives traditional stream URLs from YouTube. Changes: - Add ANDROID_VR client constants and InnertubeClientRequestInfo factory - Add getAndroidVRPlayerResponse in YoutubeStreamHelper - Detect SABR-only responses via isSabrOnlyStreamingData helper - Fall back to VR client in onFetchPage when SABR detected - Include VR streaming data in getItags, DASH/HLS manifest, and duration Fixes TeamNewPipe/NewPipe#13320
…ving stream validation
|
Please resolve the conflict. The PR will be merged once there are no conflicts. |
AudricV
left a comment
There was a problem hiding this comment.
I don't really like the class design for this feature. Live chats should get their own extractor and maybe their own info items (maybe not in this PR as it requires some thinking).
| protected String liveChatContinuation = null; | ||
|
|
There was a problem hiding this comment.
This class has no field, so you shouldn't introduce a new one here.
|
|
Your branch is in a bad state with unrelated changes, please rebase it on the dev one. |



This PR adds support for extracting YouTube live chat messages and exposing them through the existing comments API. When a live stream has regular comments disabled, the extractor now falls back to fetching live chat messages instead.
Changes
CommentsExtractor/CommentsInfo: AddedisLiveChat()flag to distinguish live chat from regular comments.YoutubeCommentsExtractor: AddedfindLiveChatContinuation()andfetchLiveChat()to retrieve live chat via thelive_chat/get_live_chatendpoint.YoutubeLiveChatInfoItemExtractor: New extractor that mapsliveChatTextMessageRendererJSON toCommentsInfoItem, with proper emoji run handling.live_chatpage identifier sogetPage()routes correctly on subsequent extractor instances.Implementation notes
The approach is based on the live chat implementation in PipePipe, adapted to fit the NewPipe Extractor architecture. Key adaptations include:
CommentsInfoItemtype instead of introducing a separate live chat item class.isLiveStreamflag handling to avoid hitting the replay endpoint on fresh extractors.emojiId→shortcuts[]→searchTerms[]→[emoji].Checklist