Add internal redirect for video URLs
This commit is contained in:
parent
96fb2118d5
commit
a9aae6b36c
@ -3652,6 +3652,31 @@ get "/api/manifest/hls_playlist/*" do |env|
|
|||||||
manifest
|
manifest
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# YouTube /videoplayback links expire after 6 hours,
|
||||||
|
# so we have a mechanism here to redirect to the latest version
|
||||||
|
get "/latest_version" do |env|
|
||||||
|
id = env.params.query["id"]?
|
||||||
|
itag = env.params.query["itag"]?
|
||||||
|
|
||||||
|
if !id || !itag
|
||||||
|
halt env, status_code: 400
|
||||||
|
end
|
||||||
|
|
||||||
|
video = get_video(id, PG_DB, proxies)
|
||||||
|
|
||||||
|
fmt_stream = video.fmt_stream(decrypt_function)
|
||||||
|
adaptive_fmts = video.adaptive_fmts(decrypt_function)
|
||||||
|
|
||||||
|
urls = (fmt_stream + adaptive_fmts).select { |fmt| fmt["itag"] == itag }
|
||||||
|
if urls.empty?
|
||||||
|
halt env, status_code: 404
|
||||||
|
elsif urls.size > 1
|
||||||
|
halt env, status_code: 409
|
||||||
|
end
|
||||||
|
|
||||||
|
env.redirect urls[0]["url"]
|
||||||
|
end
|
||||||
|
|
||||||
options "/videoplayback" do |env|
|
options "/videoplayback" do |env|
|
||||||
env.response.headers["Access-Control-Allow-Origin"] = "*"
|
env.response.headers["Access-Control-Allow-Origin"] = "*"
|
||||||
env.response.headers["Access-Control-Allow-Methods"] = "GET, OPTIONS"
|
env.response.headers["Access-Control-Allow-Methods"] = "GET, OPTIONS"
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
<% else %>
|
<% else %>
|
||||||
<% if params[:listen] %>
|
<% if params[:listen] %>
|
||||||
<% audio_streams.each_with_index do |fmt, i| %>
|
<% audio_streams.each_with_index do |fmt, i| %>
|
||||||
<source src="<%= fmt["url"] %>" type='<%= fmt["type"] %>' label="<%= fmt["bitrate"] %>k" selected="<%= i == 0 ? true : false %>">
|
<source src="/latest_version?id=<%= video.id %>&itag=<%= fmt["itag"] %>" type='<%= fmt["type"] %>' label="<%= fmt["bitrate"] %>k" selected="<%= i == 0 ? true : false %>">
|
||||||
<% end %>
|
<% end %>
|
||||||
<% else %>
|
<% else %>
|
||||||
<% if params[:quality] == "dash" %>
|
<% if params[:quality] == "dash" %>
|
||||||
@ -19,9 +19,9 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
<% fmt_stream.each_with_index do |fmt, i| %>
|
<% fmt_stream.each_with_index do |fmt, i| %>
|
||||||
<% if params[:quality] %>
|
<% if params[:quality] %>
|
||||||
<source src="<%= fmt["url"] %>" type='<%= fmt["type"] %>' label="<%= fmt["label"] %>" selected="<%= params[:quality] == fmt["label"].split(" - ")[0] %>">
|
<source src="/latest_version?id=<%= video.id %>&itag=<%= fmt["itag"] %>" type='<%= fmt["type"] %>' label="<%= fmt["label"] %>" selected="<%= params[:quality] == fmt["label"].split(" - ")[0] %>">
|
||||||
<% else %>
|
<% else %>
|
||||||
<source src="<%= fmt["url"] %>" type='<%= fmt["type"] %>' label="<%= fmt["label"] %>" selected="<%= i == 0 ? true : false %>">
|
<source src="/latest_version?id=<%= video.id %>&itag=<%= fmt["itag"] %>" type='<%= fmt["type"] %>' label="<%= fmt["label"] %>" selected="<%= i == 0 ? true : false %>">
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
Loading…
Reference in New Issue
Block a user