mirror of
				https://github.com/iv-org/invidious.git
				synced 2025-11-04 06:31:57 +00:00 
			
		
		
		
	Add internal redirect for video URLs
This commit is contained in:
		@@ -3652,6 +3652,31 @@ get "/api/manifest/hls_playlist/*" do |env|
 | 
			
		||||
  manifest
 | 
			
		||||
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|
 | 
			
		||||
  env.response.headers["Access-Control-Allow-Origin"] = "*"
 | 
			
		||||
  env.response.headers["Access-Control-Allow-Methods"] = "GET, OPTIONS"
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
    <% else %>
 | 
			
		||||
        <% if params[:listen] %>
 | 
			
		||||
            <% 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 %>
 | 
			
		||||
        <% else %>
 | 
			
		||||
            <% if params[:quality] == "dash" %>
 | 
			
		||||
@@ -19,9 +19,9 @@
 | 
			
		||||
            <% end %>
 | 
			
		||||
            <% fmt_stream.each_with_index do |fmt, i| %>
 | 
			
		||||
                <% 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 %>
 | 
			
		||||
                <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 %>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user