iptv/wwwroot/tv.html
2025-07-16 15:07:06 +08:00

91 lines
2.3 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="/bricks/3parties/xterm.css" />
<link href="/bricks/3parties/video-js.css" rel="stylesheet" />
<link rel="stylesheet" href="/bricks/css/bricks.css">
</head>
<body>
<script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.1/files/dist/echarts.min.js"></script>
<script src="/bricks/3parties/marked.min.js"></script>
<script src="/bricks/3parties/xterm.js"></script>
<!---
<link href="https://unpkg.com/video.js@6/dist/video-js.css" rel="stylesheet">
<script src="https://unpkg.com/video.js@6/dist/video.js"></script></head>
--->
<script src="/bricks/3parties/video.min.js"></script>
<script src="/bricks/3parties/recorder.wav.min.js"></script>
<script src="/bricks/bricks.js"></script>
<script>
const deviceid = bricks.deviceid('atvoe');
var dc_msg = async function(dc, msg){
var w = bricks.getWidgetById('player', bricks.Body);
var d = JSON.parse(msg);
switch (d.type){
case 'play':
w.set_source(d.url);
break;
case 'mute':
w.set_mute();
break;
default:
break;
}
dc.send('{"status":"ok"}');
}
var signaling = new bricks.Signaling({
signaling_url:'wss://atvoe.com/wss/ws/rtc_signaling.ws',
info:{
id:deviceid
},
heartbeat_period:300,
connect_opts:{
on_dc_message:dc_msg,
data_connect:true,
media_options:{
video:true,
audio:true
},
ice_servers:[
{
"urls":"stun:stun.open-computing.cn:13478"
}, {
"urls":"turn:stun.open-computing.cn:13479",
"username":"turn",
"credential":"server"
}
],
auto_callaccept:true
}
});
signaling.add_sessionhandler('p2p', bricks.RTCP2PConnect);
const opts = {
"widget": {
"widgettype":"VBox",
"options":{
"width":"100%",
"height":"100%"
},
"subwidgets":[
{
"widgettype":"urlwidget",
"options":{
"url":"/tvplayer.dspy",
"params":{
"deviceid":deviceid
}
}
}
]
}
};
const app = new bricks.App(opts);
app.run();
</script>
</body>
</html>