Something changed recently in Youtube such that many of the higher resolution video formats are no longer listed in url_
- Get HTML from https://www.youtube.com/
- Find the "dashmpd" URL, which will look like https://manifest.googlevideo.com/
api/... manifest/ dash/
- Note that it contains /signature/ rather than /s/ which means indicates that it is the real signature, not an enciphered version of it.
- Find the <Representation id="137"> in there.
- Its BaseURL should be a downloadable audio-only 1080p MP4, but instead it is 403 or sometimes 404.
What am I missing?
Update: Uh maybe I fixed it maybe.
Looking at the recent commits in youtube-dl, I only see one that might be relevant, from May 13th:
They make a change involving the url_encoded_fmt_stream_map to also check for hlsvp: which seems to be something involving multi-part audio files.
The commit message mentions restricted-embedding videos: it might be that you're not able to get the high-quailty audio-only copy because youtube doesn't generate it (or makes it 403) if embedding is disallowed.
youtube-dl has a mode to "generate" those by pulling the combined file and ffmpeg'ing out the audio stream, so a lazy solution might be to just switch to youtube-dl in -x mode. (I assume you have reasons for not doing that, since you're doing your own downloader, though)
I tried using an older version of youtube-dl (2017.08.13) and it grabbed the 1080p mp4 no problem. Haven't tried with newer versions yet, though.
My downloader predates youtube-dl; I want to keep it working because I like its features and interface, and also because a lot of other people are using it.
hlsvp is for live streams. This is not one of those.
The ffmpeg stuff is for combining the video-only and audio-only files together. I already do that.
The BaseURL is followed by a list of SegmentURL elements. Example: SegmentURL media="sq/1/dur/5.005"
When I add that as a suffix to the BaseURL, I get stuff.
So I guess the file is split up into chunks?
Yeah, I just worked that out. Sometimes using the BaseURL alone gives you the whole file. But sometimes you have to append the SegmentURLs.
Seems like if segments are specified as: "range/#####-#####", then the base url is enough.
However, if segments are specified as: "sq/1/dur/#.###", then the segments need
By the way, how do you join the segments? I found that youtube-dl works for getting the desired stream. However, I also have my own downloader and would like to use that as much as possible for at least downloading the streams.
Thanks for keeping your downloader working.
Looks fixed for me. (Failure downloading https://www.youtube.com/watch?v=B8ybR7ldXsQ is resolved.)
Have I mentioned lately that you're a fucking hero for keeping this running, aside from all the other good you do?
Thanks, one does what one can. But it doesn't feel very heroic, really, when there's another better-supported thingy out there. I'm supporting this one mostly out of inertia and slight curiosity.
Yeah, but yours generates far better filenames.
And that one's written in python! ew.
For whatever it's worth, yours is the only Youtube downloader I've ever used. Thank you for continuing to maintain it.