ip-tv / app.py
Agung1453's picture
Update app.py
7ba4be8 verified
import gradio as gr
from flask import Flask, Response, request
import requests
app_flask = Flask(__name__)
# Daftar channel
channels = [
{
"name": "Indosiar",
"url": "https://atemecdnbalancer-voe.sysln.id/live/eds/IndosiarHD/mpd/IndosiarHD.mpd",
"kid": "Xq3czYk6R6yLZfmzGWOjrA", # hex
"key": "iBr6Z+pXtBwYItdF1nVZ5g" # base64
},
{
"name": "SCTV",
"url": "https://atemecdnbalancer-voe.sysln.id/live/eds/SCTVHD/mpd/SCTVHD.mpd",
"kid": "p5oYgmNyS/ yq/ Ep8OzzYzg",
"key": "TUcy2T5nIN4O+ITXEG4U9w"
},
{
"name": "MOJI TV",
"url": "https://atemeshield1-voe.sysln.id/live/eds/MOJIOChannel/mpd/MOJIOChannel.mpd",
"kid": "BShh6+2rRzCJ0OdIDQxbYw",
"key": "TVGqAwSvmMRJ/exVSooZ+Q"
}
]
# Proxy agar UA sesuai
@app_flask.route("/proxy")
def proxy():
target_url = request.args.get("url")
headers = {"User-Agent": "ExoPlayerDemo/2.15.1 (Linux; Android 13)"}
r = requests.get(target_url, headers=headers, stream=True)
return Response(r.iter_content(chunk_size=1024), content_type=r.headers.get("content-type"))
def player(channel_index):
ch = channels[channel_index]
html = f"""
<script src="https://cdnjs.cloudflare.com/ajax/libs/shaka-player/4.3.6/shaka-player.compiled.min.js"></script>
<video id="video" width="640" controls autoplay></video>
<script>
async function initPlayer() {{
shaka.polyfill.installAll();
if (!shaka.Player.isBrowserSupported()) {{
alert("Browser tidak mendukung Shaka Player");
return;
}}
const video = document.getElementById('video');
const player = new shaka.Player(video);
const clearKeyConfig = {{
'org.w3.clearkey': {{
keyids: {{
'{ch['kid']}': '{ch['key']}'
}}
}}
}};
player.configure({{ drm: {{ servers: clearKeyConfig }} }});
try {{
await player.load("/proxy?url={ch['url']}");
}} catch (e) {{
console.error("Error load stream", e);
}}
}}
document.addEventListener('DOMContentLoaded', initPlayer);
</script>
"""
return html
with gr.Blocks() as demo:
dropdown = gr.Dropdown(choices=[c["name"] for c in channels], value=channels[0]["name"], label="Pilih Channel")
iframe = gr.HTML(player(0))
def update_player(name):
idx = [c["name"] for c in channels].index(name)
return player(idx)
dropdown.change(update_player, dropdown, iframe)
demo.launch(server_name="0.0.0.0", server_port=7860)