plugins.twitch: Client error 403 - VOD manifest is restricted (seen on channels which require sub for VOD access)
See original GitHub issuePlugin Issue
- This is a plugin issue and I have read the contribution guidelines.
Description
After logging in and attempting to fetch the supported streams, Streamlink gets sent to a usher.ttvnw.net
URL which results in a client error 403: Forbidden. Going to the URL in a web browser results in an error saying “vod_manifest_restricted” and error message of “Manifest is resticted” (note the typo).
This appears to happen for channels that require subscription to the channel to view VODs, even though I am logged in as a user which is subscribed to that channel.
Reproduction steps / Explicit stream URLs to test
All VODs from the criticalrole account give me the same issue. Here are some examples:
- twitch.tv/videos/511600192
- twitch.tv/videos/510685697
- twitch.tv/videos/505373460
Note that this last video is particularly interesting, because Streamlink handled it just fine a few weeks ago on version 1.2.0. So something changed between the interaction of Twitch’s APIs and Streamlink 1.3.0.
These videos, from other channels, load just fine (although am not subbed to other channels that require subs for VOD, so cannot test that)
- twitch.tv/videos/512812203
- twitch.tv/videos/512656691
Log output
$ streamlink twitch.tv/videos/511600192 --loglevel debug
[cli][debug] OS: macOS 10.15.1
[cli][debug] Python: 3.7.5
[cli][debug] Streamlink: 1.3.0
[cli][debug] Requests(2.22.0), Socks(1.7.1), Websocket(0.56.0)
[cli][info] Found matching plugin twitch for URL twitch.tv/videos/511600192
[cli][debug] Plugin specific arguments:
[cli][debug] --twitch-oauth-token=******** (oauth_token)
[plugin.twitch][debug] Getting video HLS streams for criticalrole
[plugin.twitch][info] Attempting to authenticate using OAuth token
[plugin.twitch][info] Successfully logged in as gingeneer
[utils.l10n][debug] Language code: en_US
error: Unable to open URL: https://usher.ttvnw.net/vod/511600192?player=twitchweb&p=226849&type=any&allow_source=true&allow_audio_only=true&allow_spectre=false&nauthsig={{redacted}}&nauth=%7B%22authorization%22%3A%7B%22forbidden%22%3Afalse%2C%22reason%22%3A%22%22%7D%2C%22chansub%22%3A%7B%22restricted_bitrates%22%3A%5B%22160p30%22%2C%22360p30%22%2C%22480p30%22%2C%22720p30%22%2C%22audio_only%22%2C%22chunked%22%5D%7D%2C%22device_id%22%3Anull%2C%22expires%22%3A1574718901%2C%22https_required%22%3Afalse%2C%22privileged%22%3Afalse%2C%22user_id%22%3Anull%2C%22version%22%3A2%2C%22vod_id%22%3A511600192%7D (403 Client Error: Forbidden for url: https://usher.ttvnw.net/vod/511600192?player=twitchweb&p=226849&type=any&allow_source=true&allow_audio_only=true&allow_spectre=false&nauthsig={{redacted}}&nauth=%7B%22authorization%22%3A%7B%22forbidden%22%3Afalse%2C%22reason%22%3A%22%22%7D%2C%22chansub%22%3A%7B%22restricted_bitrates%22%3A%5B%22160p30%22%2C%22360p30%22%2C%22480p30%22%2C%22720p30%22%2C%22audio_only%22%2C%22chunked%22%5D%7D%2C%22device_id%22%3Anull%2C%22expires%22%3A1574718901%2C%22https_required%22%3Afalse%2C%22privileged%22%3Afalse%2C%22user_id%22%3Anull%2C%22version%22%3A2%2C%22vod_id%22%3A511600192%7D)
Additional comments, screenshots, etc.
Output of URL decoded for debugging purposes:
https://usher.ttvnw.net/vod/511600192?player=twitchweb&p=369483&type=any&allow_source=true&allow_audio_only=true&allow_spectre=false&nauthsig=89470504cb8e94{{redacted}}56b8ecbd9&nauth={"authorization":{"forbidden":false,"reason":""},"chansub":{"restricted_bitrates":["160p30","360p30","480p30","720p30","audio_only","chunked"]},"device_id":null,"expires":1574719531,"https_required":false,"privileged":false,"user_id":null,"version":2,"vod_id":511600192}
Image displaying error from the URL:
Issue Analytics
- State:
- Created 4 years ago
- Comments:6 (3 by maintainers)
Top GitHub Comments
@gravyboat Fair enough, though the docs should be updated to reflect this: https://streamlink.github.io/cli.html#authenticating-with-twitch
If the signature is invalid, then you have not set the correct auth data. However, it’s unsupported now and 1.2.0 is broken anyway, so you’re out of luck here.