load thumbnail
This commit is contained in:
parent
358693035b
commit
d418b429aa
@ -146,14 +146,16 @@ class UpstreamHandler():
|
||||
self.upstream_safe = None
|
||||
self.render = False
|
||||
self.stream = False
|
||||
self.poster = False
|
||||
async def setup(self, handler):
|
||||
self.provider = handler.get_query_argument("provider", None)
|
||||
render_str = handler.get_query_argument("render", "false")
|
||||
self.render = False
|
||||
self.stream = False
|
||||
poster_str = handler.get_query_argument("poster", "false")
|
||||
if self.provider in providers.keys():
|
||||
if render_str.lower() == "true":
|
||||
self.render = True
|
||||
elif poster_str.lower() == "true":
|
||||
self.poster = True
|
||||
else:
|
||||
self.stream = True
|
||||
|
||||
@ -203,7 +205,7 @@ class UpstreamHandler():
|
||||
await session.close()
|
||||
|
||||
async def meta(self):
|
||||
data = []
|
||||
data = {}
|
||||
try:
|
||||
embed_url = f'https://noembed.com/embed?url={self.upstream_safe}'
|
||||
async with self.proxy.session() as session:
|
||||
@ -230,12 +232,14 @@ class UpstreamHandler():
|
||||
text = await resp.text()
|
||||
parser = MetaParser()
|
||||
parser.feed(text)
|
||||
data_filtered = parser.meta_data
|
||||
data = list(data_filtered.items())
|
||||
data = parser.meta_data
|
||||
data = data_filtered
|
||||
except Exception as e:
|
||||
logger.info(e)
|
||||
logger.info(data)
|
||||
return data
|
||||
async def meta_list(self):
|
||||
meta_data = await self.meta()
|
||||
return list(meta_data.items())
|
||||
|
||||
if icecast_server is not None and stream_server is not None:
|
||||
try:
|
||||
@ -344,6 +348,8 @@ class MainHandler(tornado.web.RequestHandler):
|
||||
await self.handle_render(handler)
|
||||
elif handler.stream:
|
||||
await self.handle_stream(handler, redir)
|
||||
elif handler.poster:
|
||||
await self.handle_poster(handler)
|
||||
else:
|
||||
logger.info(f'provider missing {self.request.uri}')
|
||||
self.set_status(404)
|
||||
@ -351,13 +357,14 @@ class MainHandler(tornado.web.RequestHandler):
|
||||
|
||||
async def handle_render(self, handler):
|
||||
if script_file is not None and template_html is not None:
|
||||
meta = await handler.meta()
|
||||
meta = await handler.meta_list()
|
||||
title = handler.render_url
|
||||
video_title = None
|
||||
for elem in meta:
|
||||
if isinstance(elem[1], str):
|
||||
if elem[0] == "og:title":
|
||||
video_title = elem[1]
|
||||
break
|
||||
|
||||
data["script"] = script_file
|
||||
data["videojs_version"] = videojs_version
|
||||
@ -370,6 +377,17 @@ class MainHandler(tornado.web.RequestHandler):
|
||||
self.set_status(404)
|
||||
self.write("HTML template missing.")
|
||||
|
||||
async def handle_poster(self, handler):
|
||||
meta = await handler.meta()
|
||||
image = meta.get("og:image")
|
||||
if isinstance(image, str):
|
||||
url = await handler.proxy.proxy_url(image, None)
|
||||
if isinstance(url, str):
|
||||
self.redirect(url, status=303)
|
||||
return
|
||||
self.set_status(404)
|
||||
self.write("Poster not found")
|
||||
|
||||
async def handle_stream(self, handler, redir):
|
||||
upstream = None
|
||||
if handler.provider == "nextcloud":
|
||||
|
@ -69,22 +69,14 @@ class YoutubeRunner(StreamProvider):
|
||||
return await asyncio.to_thread(self.stream)
|
||||
|
||||
async def get_ytdl(upstream, proxy, logger):
|
||||
url = None
|
||||
try:
|
||||
runner = YoutubeRunner(upstream, proxy)
|
||||
url = await runner.run()
|
||||
except Exception as e:
|
||||
logger.info(e)
|
||||
return url
|
||||
|
||||
runner = YoutubeRunner(upstream, proxy)
|
||||
result = await runner.run()
|
||||
return result
|
||||
|
||||
async def get_streamlink(upstream, proxy, logger):
|
||||
url = None
|
||||
try:
|
||||
runner = StreamlinkRunner(upstream, proxy)
|
||||
url = await runner.run()
|
||||
except Exception as e:
|
||||
logger.info(e)
|
||||
return url
|
||||
runner = StreamlinkRunner(upstream, proxy)
|
||||
result = await runner.run()
|
||||
return result
|
||||
|
||||
async def get_any(upstream, proxy, logger):
|
||||
tasks = []
|
||||
@ -92,9 +84,12 @@ async def get_any(upstream, proxy, logger):
|
||||
tasks.append(asyncio.create_task(get_ytdl(upstream, proxy, logger)))
|
||||
result = None
|
||||
for task in asyncio.as_completed(tasks, timeout=5.0):
|
||||
result = await task
|
||||
if isinstance(result, str):
|
||||
break
|
||||
try:
|
||||
result = await task
|
||||
if isinstance(result, str):
|
||||
break
|
||||
except Exception as e:
|
||||
logger.info(e)
|
||||
for task in tasks:
|
||||
if not task.done():
|
||||
task.cancel()
|
||||
|
@ -1,14 +1,24 @@
|
||||
(() => {
|
||||
const findUpstream = () => {
|
||||
const findUpstreamVideo = () => {
|
||||
const search = new URLSearchParams(location.search);
|
||||
search.set("render", "false");
|
||||
search.set("poster", "false");
|
||||
const url = new URL(location.origin);
|
||||
url.pathname = location.pathname;
|
||||
url.search = search.toString();
|
||||
return url.href;
|
||||
}
|
||||
const findUpstreamPoster = () => {
|
||||
const search = new URLSearchParams(location.search);
|
||||
search.set("render", "false");
|
||||
search.set("poster", "true");
|
||||
const url = new URL(location.origin);
|
||||
url.pathname = location.pathname;
|
||||
url.search = search.toString();
|
||||
return url.href;
|
||||
}
|
||||
|
||||
const upstream = findUpstream();
|
||||
const upstream = findUpstreamVideo();
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open("HEAD", upstream, true);
|
||||
xhr.send();
|
||||
@ -37,6 +47,7 @@
|
||||
options.plugins.chromecast = {};
|
||||
options.plugins.chromecast.addButtonToControlBar = false;
|
||||
const player = videojs(video, options);
|
||||
player.poster(findUpstreamPoster());
|
||||
const source = {};
|
||||
source.type = ctype;
|
||||
source.src = upstream;
|
||||
|
Loading…
Reference in New Issue
Block a user