mirror of
https://github.com/iv-org/invidious.git
synced 2025-07-15 18:08:29 +00:00
Merge branch 'iv-org:master' into optional-disable-api-features
This commit is contained in:
commit
116a5db24d
3
.github/CODEOWNERS
vendored
3
.github/CODEOWNERS
vendored
@ -1,6 +1,3 @@
|
|||||||
# Default and lowest precedence. If none of the below matches, @iv-org/developers would be requested for review.
|
|
||||||
* @iv-org/developers
|
|
||||||
|
|
||||||
docker-compose.yml @unixfox
|
docker-compose.yml @unixfox
|
||||||
docker/ @unixfox
|
docker/ @unixfox
|
||||||
kubernetes/ @unixfox
|
kubernetes/ @unixfox
|
||||||
|
@ -195,7 +195,7 @@ module Invidious::Routes::Feeds
|
|||||||
xml.element("link", rel: "self", href: "#{HOST_URL}#{env.request.resource}")
|
xml.element("link", rel: "self", href: "#{HOST_URL}#{env.request.resource}")
|
||||||
xml.element("id") { xml.text "yt:channel:#{ucid}" }
|
xml.element("id") { xml.text "yt:channel:#{ucid}" }
|
||||||
xml.element("yt:channelId") { xml.text ucid }
|
xml.element("yt:channelId") { xml.text ucid }
|
||||||
xml.element("title") { author }
|
xml.element("title") { xml.text author }
|
||||||
xml.element("link", rel: "alternate", href: "#{HOST_URL}/channel/#{ucid}")
|
xml.element("link", rel: "alternate", href: "#{HOST_URL}/channel/#{ucid}")
|
||||||
|
|
||||||
xml.element("author") do
|
xml.element("author") do
|
||||||
|
@ -82,7 +82,7 @@ def extract_video_info(video_id : String)
|
|||||||
"reason" => JSON::Any.new(reason),
|
"reason" => JSON::Any.new(reason),
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
elsif video_id != player_response.dig("videoDetails", "videoId")
|
elsif video_id != player_response.dig?("videoDetails", "videoId")
|
||||||
# YouTube may return a different video player response than expected.
|
# YouTube may return a different video player response than expected.
|
||||||
# See: https://github.com/TeamNewPipe/NewPipe/issues/8713
|
# See: https://github.com/TeamNewPipe/NewPipe/issues/8713
|
||||||
# Line to be reverted if one day we solve the video not available issue.
|
# Line to be reverted if one day we solve the video not available issue.
|
||||||
@ -109,21 +109,33 @@ def extract_video_info(video_id : String)
|
|||||||
params["reason"] = JSON::Any.new(reason) if reason
|
params["reason"] = JSON::Any.new(reason) if reason
|
||||||
|
|
||||||
if !CONFIG.invidious_companion.present?
|
if !CONFIG.invidious_companion.present?
|
||||||
if player_response["streamingData"]? && player_response.dig?("streamingData", "adaptiveFormats", 0, "url").nil?
|
if player_response.dig?("streamingData", "adaptiveFormats", 0, "url").nil?
|
||||||
LOGGER.warn("Missing URLs for adaptive formats, falling back to other YT clients.")
|
LOGGER.warn("Missing URLs for adaptive formats, falling back to other YT clients.")
|
||||||
players_fallback = [YoutubeAPI::ClientType::TvHtml5, YoutubeAPI::ClientType::WebMobile]
|
players_fallback = {YoutubeAPI::ClientType::TvHtml5, YoutubeAPI::ClientType::WebMobile}
|
||||||
|
|
||||||
players_fallback.each do |player_fallback|
|
players_fallback.each do |player_fallback|
|
||||||
client_config.client_type = player_fallback
|
client_config.client_type = player_fallback
|
||||||
player_fallback_response = try_fetch_streaming_data(video_id, client_config)
|
|
||||||
if player_fallback_response && player_fallback_response["streamingData"]? &&
|
next if !(player_fallback_response = try_fetch_streaming_data(video_id, client_config))
|
||||||
player_fallback_response.dig?("streamingData", "adaptiveFormats", 0, "url")
|
|
||||||
|
if player_fallback_response.dig?("streamingData", "adaptiveFormats", 0, "url")
|
||||||
streaming_data = player_response["streamingData"].as_h
|
streaming_data = player_response["streamingData"].as_h
|
||||||
streaming_data["adaptiveFormats"] = player_fallback_response["streamingData"]["adaptiveFormats"]
|
streaming_data["adaptiveFormats"] = player_fallback_response["streamingData"]["adaptiveFormats"]
|
||||||
player_response["streamingData"] = JSON::Any.new(streaming_data)
|
player_response["streamingData"] = JSON::Any.new(streaming_data)
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
|
rescue InfoException
|
||||||
|
next LOGGER.warn("Failed to fetch streams with #{player_fallback}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Seems like video page can still render even without playable streams.
|
||||||
|
# its better than nothing.
|
||||||
|
#
|
||||||
|
# # Were we able to find playable video streams?
|
||||||
|
# if player_response.dig?("streamingData", "adaptiveFormats", 0, "url").nil?
|
||||||
|
# # No :(
|
||||||
|
# end
|
||||||
end
|
end
|
||||||
|
|
||||||
{"captions", "playabilityStatus", "playerConfig", "storyboards"}.each do |f|
|
{"captions", "playabilityStatus", "playerConfig", "storyboards"}.each do |f|
|
||||||
@ -154,7 +166,7 @@ def try_fetch_streaming_data(id : String, client_config : YoutubeAPI::ClientConf
|
|||||||
playability_status = response["playabilityStatus"]["status"]
|
playability_status = response["playabilityStatus"]["status"]
|
||||||
LOGGER.debug("try_fetch_streaming_data: [#{id}] Got playabilityStatus == #{playability_status}.")
|
LOGGER.debug("try_fetch_streaming_data: [#{id}] Got playabilityStatus == #{playability_status}.")
|
||||||
|
|
||||||
if id != response.dig("videoDetails", "videoId")
|
if id != response.dig?("videoDetails", "videoId")
|
||||||
# YouTube may return a different video player response than expected.
|
# YouTube may return a different video player response than expected.
|
||||||
# See: https://github.com/TeamNewPipe/NewPipe/issues/8713
|
# See: https://github.com/TeamNewPipe/NewPipe/issues/8713
|
||||||
raise InfoException.new(
|
raise InfoException.new(
|
||||||
|
Loading…
Reference in New Issue
Block a user