diff --git a/src/helpers.cr b/src/helpers.cr index 1ababddf..1afe7674 100644 --- a/src/helpers.cr +++ b/src/helpers.cr @@ -163,3 +163,13 @@ def search(query, client) end end end + +def decrypt_signature(a) + a = a.split(""); + a.delete_at(0..2) + a = a.reverse + c = a[0] + a[0] = a[49 % a.size] + a[49] = c + return a.join("") +end \ No newline at end of file diff --git a/src/invidious.cr b/src/invidious.cr index 373d224a..39587989 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -126,7 +126,14 @@ get "/watch" do |env| fmt_stream << HTTP::Params.parse(string) end - fmt_stream.reverse! # We want lowest quality first + if fmt_stream[0]["s"]? + fmt_stream.each do |fmt| + fmt["url"] = "#{fmt["url"]}&signature=#{decrypt_signature(fmt["s"])}" + end + end + + # We want lowest quality first + fmt_stream.reverse! adaptive_fmts = [] of HTTP::Params if video.info.has_key?("adaptive_fmts") @@ -135,6 +142,12 @@ get "/watch" do |env| end end + if adaptive_fmts[0]["s"]? + adaptive_fmts.each do |fmt| + fmt["url"] = "#{fmt["url"]}&signature=#{decrypt_signature(fmt["s"])}" + end + end + rvs = [] of Hash(String, String) if video.info.has_key?("rvs") video.info["rvs"].split(",").each do |rv|