Thanks, I've looked at the docs of newpipe and invidious and neither make it straight forward to understand how they work. Both focus on "this is more private than watching on youtube"
It sounds like there is some kind of instance/server which my client/with a cleaner frontend will talk to.
But how does that work and why can youtube not detect it and block it?
If you open up the browser's Web Developer Tools on the Youtube page and go to the Network tab, you can see all the requests and responses going between the webpage (client) and the servers. The Youtube video segments are downloaded from the googlevideo.com host. These alternative clients basically go directly to the googlevideo.com to download the video segments to play them back.
Google uses DASH as the manifest file for streaming video. Each video has a corresponding DASH file. You can download the DASH manifest XML file from the Youtube page for the video. Then extract video segment URLs from the file. Those typically go to the googlevideo.com host. Google uses WebM as video container and VP9 for video encoding for the video segment, which most browsers support.
Most streaming players (alternative players) use the MSE API (Media Source Extensions) to feed the downloaded video segment data to the <video> tag to play the video. Most browsers support MSE these days.
- Piped [1] uses NewPipeExtractor [2] (which is also used by NewPipe) to parse YouTube responses. I assume this is somewhat similar to what yt-dlp [3] does ?
- Invidious states in their FAQ [4]: "By default, the video stream is fetched directly from Google's servers (googlevideo.com)".
It sounds like there is some kind of instance/server which my client/with a cleaner frontend will talk to.
But how does that work and why can youtube not detect it and block it?