mirror of
https://git.nadeko.net/Fijxu/invidious.git
synced 2025-12-29 19:11:23 +00:00
Feat: Experimental support for external videoplayback proxies
This commit is contained in:
@@ -1,4 +1,15 @@
|
||||
module Invidious::Routes::API::Manifest
|
||||
@@proxy_alive : Bool = false
|
||||
|
||||
def self.check_external_proxy
|
||||
begin
|
||||
response = HTTP::Client.get("#{CONFIG.external_videoplayback_proxy}")
|
||||
@@proxy_alive = response.status_code == 200
|
||||
rescue
|
||||
@@proxy_alive = false
|
||||
end
|
||||
end
|
||||
|
||||
# /api/manifest/dash/id/:id
|
||||
def self.get_dash_video_id(env)
|
||||
env.response.headers.add("Access-Control-Allow-Origin", "*")
|
||||
@@ -35,7 +46,11 @@ module Invidious::Routes::API::Manifest
|
||||
|
||||
if local
|
||||
uri = URI.parse(url)
|
||||
url = "#{HOST_URL}#{uri.request_target}host/#{uri.host}/"
|
||||
if @@proxy_alive
|
||||
url = "#{CONFIG.external_videoplayback_proxy}#{uri.request_target}host/#{uri.host}/"
|
||||
else
|
||||
url = "#{HOST_URL}#{uri.request_target}host/#{uri.host}/"
|
||||
end
|
||||
end
|
||||
|
||||
"<BaseURL>#{url}</BaseURL>"
|
||||
@@ -48,21 +63,24 @@ module Invidious::Routes::API::Manifest
|
||||
|
||||
if local
|
||||
adaptive_fmts.each do |fmt|
|
||||
fmt["url"] = JSON::Any.new("#{HOST_URL}#{URI.parse(fmt["url"].as_s).request_target}")
|
||||
if @@proxy_alive
|
||||
fmt["url"] = JSON::Any.new("#{CONFIG.external_videoplayback_proxy}#{URI.parse(fmt["url"].as_s).request_target}")
|
||||
else
|
||||
fmt["url"] = JSON::Any.new("#{HOST_URL}#{URI.parse(fmt["url"].as_s).request_target}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
audio_streams = video.audio_streams.sort_by { |stream| {stream["bitrate"].as_i} }.reverse!
|
||||
video_streams = video.video_streams.sort_by { |stream| {stream["width"].as_i, stream["fps"].as_i} }.reverse!
|
||||
|
||||
# Removes all the resolutions with a height higher than CONFIG.max_dash_resolution
|
||||
# Removes all the resolutions with a height higher than CONFIG.max_dash_resolution
|
||||
if CONFIG.max_dash_resolution
|
||||
video_streams.reject! do |z|
|
||||
(z["height"].as_i > CONFIG.max_dash_resolution.not_nil!) if z["height"]?
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
manifest = XML.build(indent: " ", encoding: "UTF-8") do |xml|
|
||||
xml.element("MPD", "xmlns": "urn:mpeg:dash:schema:mpd:2011",
|
||||
"profiles": "urn:mpeg:dash:profile:full:2011", minBufferTime: "PT1.5S", type: "static",
|
||||
|
||||
Reference in New Issue
Block a user