mirror of
				https://github.com/iv-org/invidious.git
				synced 2025-10-31 04:32:02 +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
	 Omar Roth
					Omar Roth