Fix dash endpoint
This commit is contained in:
parent
208f32661b
commit
e0dd56f4ff
1 changed files with 38 additions and 8 deletions
|
@ -594,7 +594,8 @@ get "/redirect" do |env|
|
|||
end
|
||||
end
|
||||
|
||||
# Return dash manifest for the given video ID
|
||||
# Return dash manifest for the given video ID, note this will not work on
|
||||
# videos that already have a dashmpd in video info.
|
||||
get "/api/manifest/dash/id/:id" do |env|
|
||||
env.response.headers.add("Access-Control-Allow-Origin", "*")
|
||||
env.response.content_type = "application/dash+xml"
|
||||
|
@ -644,9 +645,10 @@ get "/api/manifest/dash/id/:id" do |env|
|
|||
end
|
||||
|
||||
manifest = XML.build(indent: " ", encoding: "UTF-8") do |xml|
|
||||
xml.element("MPD", "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation": "urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd",
|
||||
xmlns: "urn:mpeg:dash:schema:mpd:2011", profiles: "urn:mpeg:dash:profile:isoff-main:2011",
|
||||
mediaPresentationDuration: "PT#{video.info["length_seconds"]}S", minBufferTime: "PT2S", type: "static") do
|
||||
xml.element("MPD", "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance", "xmlns": "urn:mpeg:DASH:schema:MPD:2011",
|
||||
"xmlns:yt": "http://youtube.com/yt/2012/10/10", "xsi:schemaLocation": "urn:mpeg:DASH:schema:MPD:2011 DASH-MPD.xsd",
|
||||
minBufferTime: "PT1.5S", profiles: "urn:mpeg:dash:profile:isoff-main:2011", type: "static",
|
||||
mediaPresentationDuration: "PT#{video.info["length_seconds"]}S") do
|
||||
xml.element("Period") do
|
||||
xml.element("AdaptationSet", id: 0, mimeType: "audio/mp4", subsegmentAlignment: true) do
|
||||
xml.element("Role", schemeIdUri: "urn:mpeg:DASH:role:2011", value: "main")
|
||||
|
@ -657,8 +659,12 @@ get "/api/manifest/dash/id/:id" do |env|
|
|||
bandwidth = fmt["bitrate"]
|
||||
itag = fmt["itag"]
|
||||
url = fmt["url"]
|
||||
url = url.gsub("?", "/")
|
||||
url = url.gsub("&", "/")
|
||||
url = url.gsub("=", "/")
|
||||
|
||||
xml.element("Representation", id: fmt["itag"], codecs: codecs, bandwidth: bandwidth) do
|
||||
xml.element("AudioChannelConfiguration", schemeIdUri: "urn:mpeg:dash:23003:3:audio_channel_configuration:2011", value: "2")
|
||||
xml.element("BaseURL") { xml.text url }
|
||||
xml.element("SegmentBase", indexRange: fmt["init"]) do
|
||||
xml.element("Initialization", range: fmt["index"])
|
||||
|
@ -672,13 +678,16 @@ get "/api/manifest/dash/id/:id" do |env|
|
|||
video_streams.each do |fmt|
|
||||
mimetype, codecs = fmt["type"].split(";")
|
||||
codecs = codecs[9..-2]
|
||||
fmt_type = mimetype.split("/")[0]
|
||||
bandwidth = fmt["bitrate"]
|
||||
itag = fmt["itag"]
|
||||
url = fmt["url"]
|
||||
url = url.gsub("?", "/")
|
||||
url = url.gsub("&", "/")
|
||||
url = url.gsub("=", "/")
|
||||
height, width = fmt["size"].split("x")
|
||||
|
||||
xml.element("Representation", id: itag, codecs: codecs, width: width, height: height, bandwidth: bandwidth, frameRate: fmt["fps"]) do
|
||||
xml.element("Representation", id: itag, codecs: codecs, width: width, startWithSAP: "1", maxPlayoutRate: "1",
|
||||
height: height, bandwidth: bandwidth, frameRate: fmt["fps"]) do
|
||||
xml.element("BaseURL") { xml.text url }
|
||||
xml.element("SegmentBase", indexRange: fmt["init"]) do
|
||||
xml.element("Initialization", range: fmt["index"])
|
||||
|
@ -862,8 +871,29 @@ get "/modify_theme" do |env|
|
|||
env.redirect referer
|
||||
end
|
||||
|
||||
get "/videoplayback" do |env|
|
||||
query_params = env.params.query
|
||||
get "/videoplayback*" do |env|
|
||||
path = env.request.path
|
||||
if path != "/videoplayback"
|
||||
path = path.lchop("/videoplayback/")
|
||||
path = path.split("/")
|
||||
# puts path
|
||||
|
||||
raw_params = {} of String => Array(String)
|
||||
path.each_slice(2) do |pair|
|
||||
key, value = pair
|
||||
value = URI.unescape(value)
|
||||
|
||||
if raw_params[key]?
|
||||
raw_params[key] << value
|
||||
else
|
||||
raw_params[key] = [value]
|
||||
end
|
||||
end
|
||||
|
||||
query_params = HTTP::Params.new(raw_params)
|
||||
else
|
||||
query_params = env.params.query
|
||||
end
|
||||
|
||||
fvip = query_params["fvip"]
|
||||
mn = query_params["mn"].split(",")[0]
|
||||
|
|
Loading…
Reference in a new issue