diff options
| author | Samantaz Fox <coding@samantaz.fr> | 2021-11-21 17:34:17 +0100 |
|---|---|---|
| committer | Samantaz Fox <coding@samantaz.fr> | 2021-11-21 17:34:17 +0100 |
| commit | 319587e2f11abe53c507d2363ca551d8321b203f (patch) | |
| tree | 6865126c9b6470adc9963bb639ea0f0e90a3391b /src | |
| parent | 12c219ee6ceb2a854f4ffd181938908d2a455e94 (diff) | |
| download | invidious-319587e2f11abe53c507d2363ca551d8321b203f.tar.gz invidious-319587e2f11abe53c507d2363ca551d8321b203f.tar.bz2 invidious-319587e2f11abe53c507d2363ca551d8321b203f.zip | |
extract_video_info: make sure that the Android player response is valid
Diffstat (limited to 'src')
| -rw-r--r-- | src/invidious/videos.cr | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/invidious/videos.cr b/src/invidious/videos.cr index d3e5800c..4406284f 100644 --- a/src/invidious/videos.cr +++ b/src/invidious/videos.cr @@ -857,8 +857,16 @@ def extract_video_info(video_id : String, proxy_region : String? = nil, context_ else client_config.client_type = YoutubeAPI::ClientType::Android end - stream_data = YoutubeAPI.player(video_id: video_id, params: "", client_config: client_config) - params["streamingData"] = stream_data["streamingData"]? || JSON::Any.new("") + android_player = YoutubeAPI.player(video_id: video_id, params: "", client_config: client_config) + + # Sometime, the video is available from the web client, but not on Android, so check + # that here, and fallback to the streaming data from the web client if needed. + # See: https://github.com/iv-org/invidious/issues/2549 + if android_player["playabilityStatus"]["status"] == "OK" + params["streamingData"] = android_player["streamingData"]? || JSON::Any.new("") + else + params["streamingData"] = player_response["streamingData"]? || JSON::Any.new("") + end end {"captions", "microformat", "playabilityStatus", "storyboards", "videoDetails"}.each do |f| |
